解决uni-app+springboot+shiro前后端分离导致sessionId不一致的问题

srpingboot增加跨域处理的配置类

因为前后端分离的项目中,每次发起的请求都是跨域,且每次请求都是全新的,所以shiro所管理的会话每次都会返回一个新的sessionId,即使在后台做了session持久化的处理,也会因为sessionId不一致,导致获取不到session里的用户信息或其他信息(这个看个人在shiro中的配置)

 

/**
 * 解决跨域请求的
 */

@Configuration
public class CorsConfig {
    private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        //  你需要跨域的地址  注意这里的 127.0.0.1 != localhost
        // * 表示对所有的地址都可以访问
        corsConfiguration.addAllowedOrigin("*");
        //  跨域的请求头
        corsConfiguration.addAllowedHeader("*"); // 2
        //  跨域的请求方法
        corsConfiguration.addAllowedMethod("*"); // 3
        //加上了这一句,大致意思是可以携带 cookie
        //最终的结果是可以 在跨域请求的时候获取同一个 session
        corsConfiguration.setAllowCredentials(true);
        return corsConfiguration;
    }
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        //配置 可以访问的地址
        source.registerCorsConfiguration("/**", buildConfig()); // 4
        return new CorsFilter(source);
    }
}

uni-app中的uni.request请求条件中都带上,表示允许请求中携带cookie信息,默认不携带

                        withCredentials:true,
                        xhrFields: {
                            withCredentials: true
                        }

这样登录后,通过shiro认证返回的sesssionId才会保持一致

 

你可能感兴趣的:(1024程序员节)