Spring Boot和Angular网页需要刷新页面

问题描述

我最近刚从一个完整的堆栈开发课程毕业,现在正在从事一个带有弹簧靴和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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...