问题描述
我最近刚从一个完整的堆栈开发课程毕业,现在正在从事一个带有弹簧靴和angular的小型个人项目。 我在有角度的默认端口(4200)上测试了该应用程序,并且工作正常。 稍后,我将角度代码合并到服务器内部,并再次测试了该应用程序(在端口8080上),但是现在,某些操作需要刷新页面。 例如,如果我以新用户身份注册到我的应用程序或以现有用户身份登录,则主页为空。只有刷新页面后,我才能看到主页。另一个示例是,当我注销并使用其他用户再次登录时,主窗口仍显示先前的用户。只有刷新页面后,我才能看到我的当前用户。 无法找出解决方案。
帐户外观:
package com.example.socialNetwork.businessLogic;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import com.example.socialNetwork.beans.User;
import com.example.socialNetwork.exceptions.UserAlreadyExistsException;
import com.example.socialNetwork.exceptions.UserDoesntExistException;
@Service
@Scope("prototype")
public class AccountManager
{
@Autowired
private ConfigurableApplicationContext ctx;
/**
* Sign up new user to the app
* @param user - The user we want to create
* @return UserFacade
* @throws UserAlreadyExistsException
*/
public UserFacade signUp(User user) throws UserAlreadyExistsException
{
UserFacade userFacade = ctx.getBean(UserFacade.class);
//if user doesn't exist already returns true - create new user
if(userFacade.SignUp(user))
{
userFacade.addUser(user);
return userFacade;
}
return null;
}
/**
* Login as an existing user
* @param email - user's email address
* @param password - user's password
* @return UserFacade
* @throws UserDoesntExistException
*/
public UserFacade login(String email,String password) throws UserDoesntExistException
{
UserFacade userFacade = ctx.getBean(UserFacade.class);
//sign in if user exists,else throw exception
if(userFacade.login(email,password))
return userFacade;
else
throw new UserDoesntExistException();
}
/**
* Get list of countries from LUT
* @return Set<String> countries
* @throws IOException
*/
public Set<String> getCountries() throws IOException
{
List<String> countries = new ArrayList<String>();
BufferedReader br = new BufferedReader(new FileReader("assets\\worldcities.csv"));
String line = "";
String[] data = null;
while((line = br.readLine()) != null)
{
data = line.split(",");
countries.add(data[4]);
}
br.close();
Collections.sort(countries);
Set<String> sortedCountries = new HashSet<String>(countries);
return sortedCountries;
}
/**
* Get list of cities by country
* @param country - country the user lives in
* @return Set<String> cities
* @throws IOException
*/
public Set<String> getCities(String country) throws IOException
{
List<String> cities = new ArrayList<String>();
BufferedReader br = new BufferedReader(new FileReader("assets\\worldcities.csv"));
String line = "";
String[] data = null;
while((line = br.readLine()) != null)
{
data = line.split(",");
if(data[4].contains(country))
cities.add(data[1]);
}
br.close();
Collections.sort(cities);
Set<String> sortedCities = new HashSet<String>(cities);
return sortedCities;
}
}
帐户控制器:
package com.example.socialNetwork.web;
import java.io.IOException;
import java.util.Map;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.socialNetwork.beans.User;
import com.example.socialNetwork.businessLogic.AccountManager;
import com.example.socialNetwork.businessLogic.UserFacade;
import com.example.socialNetwork.exceptions.UserAlreadyExistsException;
import com.example.socialNetwork.exceptions.UserDoesntExistException;
@RestController
@RequestMapping("/account")
@CrossOrigin(origins = "http://localhost:4200")
public class AccountController
{
@Autowired
private AccountManager manager;
@Autowired
private Map<String,CurrentSession> sessions;
/**
* Sign up new user to the app
* @param user - The user we want to create
* @return UserFacade
* @throws UserAlreadyExistsException
*/
@PostMapping("/signUp")
public ResponseEntity<String> signUp(@RequestBody User user)
{
try
{
UserFacade userFacade = manager.signUp(user);
if(userFacade != null)
{
String token = UUID.randomUUID().toString();
// String token = "1";
CurrentSession session = new CurrentSession(userFacade,System.currentTimeMillis());
sessions.put(token,session);
return ResponseEntity.ok(token);
}
}
catch (UserAlreadyExistsException e)
{
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(e.getMessage());
}
return null;
}
/**
* Login as an existing user
* @param email - user's email address
* @param password - user's password
* @return UserFacade
* @throws UserDoesntExistException
*/
@PostMapping("/login/{email}/{password}")
public ResponseEntity<String> login(@PathVariable String email,@PathVariable String password)
{
UserFacade user;
try
{
user = manager.login(email,password);
if(user != null)
{
String token = UUID.randomUUID().toString();
// String token = "1";
CurrentSession session = new CurrentSession(user,session);
return ResponseEntity.ok(token);
}
}
catch (UserDoesntExistException e)
{
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage());
}
return null;
}
/**
* Log out
* @param token - user's token
*/
@DeleteMapping("/logout/{token}")
public void signOut(@PathVariable String token)
{
sessions.remove("token");
}
/**
* Get list of countries from LUT
* @return Set<String> countries
* @throws IOException
*/
@GetMapping("/getCountries")
public ResponseEntity<?> getCountries()
{
try
{
return ResponseEntity.ok(manager.getCountries());
}
catch (IOException e)
{
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage());
}
}
/**
* Get list of cities by country
* @param country - country the user lives in
* @return Set<String> cities
* @throws IOException
*/
@GetMapping("/getCities/{country}")
public ResponseEntity<?> getCities(@PathVariable String country)
{
try
{
return ResponseEntity.ok(manager.getCities(country));
}
catch (IOException e)
{
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage());
}
}
}
Web配置:
package com.example.socialNetwork.web;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.resource.PathResourceResolver;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class WebConfig implements WebMvcConfigurer
{
@Bean
public Map<String,CurrentSession> sessions()
{
return new HashMap<String,CurrentSession>();
}
@Bean
public Docket api()
{
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry)
{
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/").resourceChain(true).addResolver(new PathResourceResolver()
{
protected Resource getResource(String resourcePath,Resource location) throws IOException
{
Resource requestedResource = location.createRelative(resourcePath);
return requestedResource.exists() && requestedResource.isReadable() ? requestedResource: new ClassPathResource("/static/index.html");
}
});
WebMvcConfigurer.super.addResourceHandlers(registry);
}
}
希望这是足够的信息。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)