【发布时间】:2018-08-20 08:43:40
【问题描述】:
我按照教程 https://auth0.com/blog/implementing-jwt-authentication-on-spring-boot/ 将 jwt 集成到我的应用程序中。我正在尝试向我的应用程序添加自定义成功处理程序。不幸的是,成功的处理程序不会在成功的登录请求时触发。我正在尝试返回一个用户对象,而不是标头中带有令牌的空响应。我的处理程序是
@Component
public class AuthSuccessHandler implements AuthenticationSuccessHandler {
@Autowired
private ApplicationUserRepository userRepository;
@Autowired
private ObjectMapper objectMapper;
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) throws IOException, ServletException {
UserDetails user = (UserDetails) authentication.getPrincipal();
AuthInfo authInfo = new AuthInfo();
authInfo.setUser(userRepository.findOneByUserName(user.getUsername()));
authInfo.setToken(response.getHeader("Authentication"));
response.getWriter().write(objectMapper.writeValueAsString(authInfo));
response.setContentType("application/json");
response.setStatus(200);
}
}
我已经在WebSecurityConfigurer.configure()中配置为
protected void configure(HttpSecurity http) throws Exception {
http.cors().and().csrf().disable().authorizeRequests()
.antMatchers(HttpMethod.POST, SIGN_UP_URL).permitAll()
.antMatchers(HttpMethod.GET, "/public/**").permitAll()
.anyRequest()
.authenticated()
.and()
.formLogin()
.successHandler(successHandler)
.and()
.addFilter(new JWTAuthenticationFilter(authenticationManager(), securityConfig))
.addFilter(new JWTAuthorizationFilter(authenticationManager(), securityConfig))
// this disables session creation on Spring Security
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
@pvpkiran 的解决方案不起作用。在调试时,我发现 authenticationfilter 运行了两次并且授权过滤器没有触发。下面给出了应用程序日志中可用的过滤器列表
Security filter chain: [
WebAsyncManagerIntegrationFilter
SecurityContextPersistenceFilter
HeaderWriterFilter
CorsFilter
LogoutFilter
JWTAuthenticationFilter
JWTAuthorizationFilter
RequestCacheAwareFilter
SecurityContextHolderAwareRequestFilter
AnonymousAuthenticationFilter
SessionManagementFilter
ExceptionTranslationFilter
FilterSecurityInterceptor
]
【问题讨论】:
标签: java spring-boot spring-security jwt