我只是Spring Security Oauth2的初学者。 我有授权服务器和资源服务器(分开)。 我使用的流程是授权码。我成功登录授权服务器,获取代码,然后获取accessToken。 然后,当我想要注销时,我遇到了问题。当我在Apache Tomcat中部署Authorization Server时,它可以调用' j_spring_security_logout'但是当我在Glashfish中部署时,它不能。
这是我的安全配置:
protected void configure(HttpSecurity http) throws Exception {
http.sessionManagement().maximumSessions(1).maxSessionsPreventsLogin(false);
http.authorizeRequests().antMatchers(HttpMethod.OPTIONS, "/oauth/token").permitAll().and()
.authorizeRequests()
.antMatchers("/login.jsp").permitAll()
.and()
.formLogin()
.loginPage("/login.jsp")
.loginProcessingUrl("/j_spring_security_check")
.usernameParameter("j_username")
.passwordParameter("j_password")
.and()
.logout()
.invalidateHttpSession(true)
.deleteCookies("JSESSIONID")
.logoutUrl("/j_spring_security_logout")
.logoutSuccessHandler(logoutHandler);
}
这是我的logouthandler:
public void onLogoutSuccess(HttpServletRequest req, HttpServletResponse res, Authentication a) throws IOException, ServletException {
String token=req.getParameter("token");
if(token != null){
consumerTokenServices.revokeToken(token);
}
String redirect = req.getParameter("redirect");
if(redirect != null){
res.sendRedirect(redirect);
}
}