关于登陆后无法获取当前用户信息的问题---Spring Security
Opened this issue · 0 comments
xiaoming-master commented
在配置 SecurityConfig的configure(WebSecurity) 方法时,可以配置直接放行的请求
@Override
public void configure(WebSecurity web) throws Exception {
//需要直接放行的请求,不会进入过滤器链
web.ignoring().mvcMatchers(
"/css/**",
"/js/**",
"index.html",
"/favicon.ico",
"/doc.html",
"/webjars/**",
"/swagger-resources/**",
"v2/api-docs/**"
);
}
这些请求不会进入到security的过滤器链中,所以,登陆接口"/login"不能在这里配置,
如果放在这里,登录请求将不走 SecurityContextPersistenceFilter 过滤器,也就意味着不会将登录用户信息存入 session,进而导致后续请求无法获取到登录用户信息。
应当在SecurityConfig的configure(HttpSecurity http)中配置
@Override
protected void configure(HttpSecurity http) throws Exception {
//使用jwt不需要csrf
http.csrf()
.disable()
.sessionManagement()
//基于token不需要session
// .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/login", "/logout")
.permitAll()
//其他所有的请求都需要验证
.anyRequest()
.authenticated();
// .and()
// //不用缓存
// .headers()
// .cacheControl();
//jwt验证过滤器
http.addFilterBefore(jwtAuthenticationTokenFilter(), UsernamePasswordAuthenticationFilter.class);
//添加未授权,未登陆处理器
http.exceptionHandling()
//没有权限
.accessDeniedHandler(restAccessDeniedHandler)
//没有登陆
.authenticationEntryPoint(restAuthenticationEntryPoint);
}
同时需要开启session,才能获取登陆用户信息