首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring AOP Spring Security

Spring AOP Spring Security
EN

Stack Overflow用户
提问于 2018-02-13 18:38:12
回答 3查看 669关注 0票数 0

当用户单击注销按钮时,我正在尝试将日志保存到数据库中。对于登录,我使用@Before...方法,而AOP正在执行此方法,并将记录保存到数据库中。

但是注销有一点不同,因为我没有特定的注销方法,相反,注销是由Spring Security处理的:

代码语言:javascript
复制
   // ...
   .and()
   .logout()
   .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
   .logoutSuccessUrl("/")
   // ...

为了在注销发生之前执行方法,最佳实践是什么?

谢谢,R。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-13 19:38:49

最后,我得到了一个使用实现LogoutSuccessHandler接口的CustomLogoutSuccessHandler来解决这个问题的解决方案,但是我不能使用它,因为当调用该方法时,Security Handler不能再访问用户信息,因为它是断开连接的。但是接口方法onLogoutSuccess附带了身份验证参数,我可以使用该参数在关闭http会话之前检索用户信息并将其存储到数据库中。

如果有任何其他解决方案,请回复。

谢谢R。

票数 1
EN

Stack Overflow用户

发布于 2019-02-14 18:50:53

使用spring aop,你可以这样做:

代码语言:javascript
复制
@Before("execution(* org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler.logout(..))")
public void beforeLogout(JoinPoint joinPoint) throws Throwable {        
    System.out.println(
                ">>> Aspect : User " + SecurityContextHolder.getContext().getAuthentication().getName() + " successfully logged out.");
}
票数 2
EN

Stack Overflow用户

发布于 2018-02-13 19:51:51

您的方法很好,我已经显式地将spring安全注销成功url映射到spring控制器,如下所示:

代码语言:javascript
复制
@RequestMapping(value="/logout", method = RequestMethod.GET)
public String logoutPage (HttpServletRequest request, HttpServletResponse response) {
    Authentication auth = SecurityContextHolder.getContext().getAuthentication();
    if (auth != null){    
        new SecurityContextLogoutHandler().logout(request, response, auth);
    }
    return "redirect:/login?logout";//You can redirect wherever you want, but generally it's a good practice to show login screen again.
}
代码语言:javascript
复制
<logout
 logout-success-url="/logout"
 delete-cookies="JSESSIONID" />

在控制器方法内部,你做你的审计工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48764755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档