Doctor_me 2019-08-30 16:50 采纳率: 0%
浏览 1737

springboot2框架搭建的前后端分离系统,session很快就丢失了

基于springboot搭建的后台框架,做了跨域,能访问到接口,后台设置了拦截器

    public class LoginInterceptor implements HandlerInterceptor {
    //这个方法是在访问接口之前执行的,只需要在这里写验证登录状态的业务逻辑,就可以在用户调用指定接口之前验证登录状态
    public boolean preHandle(HttpServletRequest request, HttpSession session, HttpServletResponse response, Object handler) throws Exception {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse rep = (HttpServletResponse) response;
        rep.setHeader("Access-Control-Allow-Origin", req.getHeader("Origin"));
        rep.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        rep.setHeader("Access-Control-Max-Age", "3600");
        rep.setHeader("Access-Control-Allow-Headers", "Content-Type,XFILENAME,XFILECATEGORY,XFILESIZE");
        rep.setHeader("Access-Control-Allow-Credentials","true"); //是否支持cookie跨域

        String loginName = (String) session.getAttribute("loginName");
        System.out.println("loginName======"+loginName);
        if (loginName == null || loginName.equals("")){
            return false;
        }else {
            return true;
        }
    }

@Configuration
public class WebConfigurer implements WebMvcConfigurer {

@Autowired
private LoginInterceptor loginInterceptor;

    // 这个方法用来配置静态资源,如html,js,css等
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
  registry.addResourceHandler("/static/**");
    }
 //设置跨域访问
    @Override
    public void addCorsMappings(CorsRegistry registry) {
  registry.addMapping("/**")
          .allowedOrigins("*")
          .allowedHeaders("*")
          .exposedHeaders("access-control-allow-headers",
                "access-control-allow-methods",
                "access-control-allow-origin",
                "access-control-max-age",
                "X-Frame-Options")
          .allowedMethods("GET", "HEAD", "POST", "PUT", "PATCH", "DELETE", "OPTIONS", "TRACE")
          .allowCredentials(true).maxAge(3600);
    }

    // 这个方法用来注册拦截器,写好的拦截器需要通过这里添加注册才能生效
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
  // addPathPatterns("/**") 表示拦截所有的请求,excludePathPatterns("/login", "/register") 表示除了登陆与注册之外
  registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/loginAndInit", "/registerUser", "/getUsers");
    }
}

yml配置文件部分

    #服务器配置,配80能够省去地址后的端口号
    server:
        port: 80
        session-timeout: 3600 * 24 * 7
        tomcat.max-threads: 0
        tomcat.uri-encoding: UTF-8

前端html页面使用ajax调用,加了
````crossDomain:true,
                xhrFields: {
                    withCredentials: true
                },
                async:true,

但是每次登录后一分钟不访问就掉了,明明设置的都是3600以上了,再掉其他接口后台取session存的值时就成null了。求大佬解答!!感激不尽!!明天要演示系统,头很大!!!
  • 写回答

1条回答 默认 最新

  • jeff.sheng Java领域优质创作者 2019-08-30 17:10
    关注

    浏览器有没有自动清除cookie

    评论

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题