shiro框架使用中踩得坑,总结一下加深印象
首先,说明运行环境,前后端分离,跨域。
先说一下跨域,跨域最好不要直接用注解形式,很麻烦,因为如果有需要设置的内容时还要一个一个找到注解更改,直接配置bean方便很多
@Bean private CorsConfiguration buildConfig() { CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.addAllowedHeader("*"); corsConfiguration.addAllowedOrigin("*"); corsConfiguration.addAllowedMethod("*"); corsConfiguration.setMaxAge(3600L); // 预检请求的有效期,单位为秒。 corsConfiguration.setAllowCredentials(true);// 是否支持安全证书(必需参数) return corsConfiguration; } @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", buildConfig()); return new CorsFilter(source); }
1. 跨域一般都会遇到能登陆但是不进授权的问题,因为shiro存储认证信息是在登录后存在浏览器的cookie中,访问授权接口时会从cookie中取出认证信息进行认证,但是跨域cookie传不到后台,用了另一种办法,把认证信息存在请求头中
https://www.cnblogs.com/elvinle/p/9272076.html-比较详细
用了这种方式后把会话管理器注册到DefaultWebSecurityManager ,这样登录后把认证信息放在响应头中返回,前端取出来放在请求头中发回来,就是从请求头中直接拿认证信息了
@Bean(name = "sessionManager") public DefaultHeaderSessionManager sessionManager() { DefaultHeaderSessionManager sessionManager = new DefaultHeaderSessionManager(); // 设置session过期时间3600s sessionManager.setGlobalSessionTimeout(3600000L); sessionManager.setSessionValidationInterval(3600000L); return sessionManager; } @Bean public SecurityManager securityManager() { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setSessionManager(sessionManager()); securityManager.setRealm(myShiroRealm()); return securityManager; }
1.1 这里还有个小问题
https://segmentfault.com/q/1010000019535285---比较详细
在使用跨域的时候前端不能直接从响应头中取数据,为null。因为在使用跨域的方式进行前后端的交互时,浏览器只会使用默认的header。而认证信息是新添加的所以没效果,需要告诉浏览器,这个请求头数据要用,你得给前端才行
response.setHeader("key", token); response.setHeader("Access-Control-Expose-Headers", "请求头的key");
这是在登陆后,把认证信息放入响应头后,添加这行代码,浏览器才会知道你要用,才能拿到
2. 暂时没二
相关推荐
nullcy 2020-04-25
visionzheng 2020-04-14
ganjing 2020-02-16
杜鲁门 2020-11-05
luckyxl0 2020-08-16
Dullonjiang 2020-08-09
xclxcl 2020-08-03
zmzmmf 2020-08-03
MicroBoy 2020-08-02
ganjing 2020-08-02
likesyour 2020-08-01
zmzmmf 2020-07-09
MicroBoy 2020-07-05
zzhao 2020-06-26
子云 2020-06-18
visionzheng 2020-06-07
neweastsun 2020-06-04
ErixHao 2020-06-03
GDreams0 2020-06-01