从上一篇文章我们可以知道spring security 中有一整套的过滤器链对一个请求进行层层过滤。而开发者所需要做的就是配置这些过滤器的规则。那么这些过滤器内置了过滤规则之后该如何进行相应的处理呢?
虽然spring security内部都有了默认处理。但是最让人心慌的却是,你不知道他怎么处理了,或者你想自定义处理逻辑的时候,不知道该如何下手。那么spring security当然也想到了这些问题。
那就让我们看看我们该如何处理这些问题
如果大家有看我的之前的文章,一定留意到代码中有一段这样的代码
AuthenticationSuccessHandler handler=new AuthenticationSuccessHandler() {
@Override
public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {
httpServletResponse.sendRedirect(httpServletRequest.getContextPath()+"/index");
}
};
看名字 AuthenticationSuccessHandler ,是的没错,你马上就能按字面意思翻译过来,认证成功处理器。
我们这里实现了onAuthenticationSuccess 这个方法。当认证成功的时候会走这个方法中的逻辑。
那么我们来列举写spring security中的处理器都有哪些,都能做什么用
1.AuthenticationSuccessHandler 登入成功处理器,登入成功时的操作,是要重定向还是返回json还是返回权限菜单等
2.AccessDeniedHandler 鉴权失败处理器,当没有权限访问某个资源的时候的处理逻辑
3.LogoutSuccessHandler 登出成功处理器,登出成功的时候怎么操作,例如重定向还是不处理还是返回json
4.AuthenticationFailureHandler 登入失败处理器,当登入失败的时候要做什么,重定向到登入页面还是,返回json等
如果有需要更多的了解可以直接去看看包内都有哪些一Handler 结尾的接口或者类就知道了。
以上四个为接口,内部都有对应的实现,那么你如果要自定义处理,只需实现以上接口即可,也可以继承自相关的实现类
然后在http中指定相关处理器就可以了像这样:
@AutoWire
MyAuthenticationSuccessHandler handler;//自定义处理器
-----此处省略
http.formLogin().successHandler(handler) //可以处理登陆成功事件
-----此处省略