一、准备工作参考spring security 入门基础,表单认证web页面跳转-CSDN博客
二、基于前后端分离方式
可能有的会疑问,如果我是一个前后端分离,或者页面不想这么跳转该如何解决呢,实际上spirng security 以及帮我们实现了
2.1 认证成功后,返回一个ajax 数据
首先配置一个 .successHandler() 里面自定义一个成功的处理器,实现AuthenticationSuccessHandler,我们可以看到,里面有一个默认的方法当认证成功后,会进行回调下面的方法,那么我们实现一下下面的这个方法
2.1.1 实现自己的成功的handler
LoginSuccessHandler,并且将自己的handler 放到 .successHandler(new LoginSuccessHandler())中,这一步别忘记了
public class LoginSuccessHandler implements AuthenticationSuccessHandler {
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
Map<String,Object> resMap = new HashMap<>();
resMap.put("code","0");
resMap.put("msg","登录成功");
resMap.put("data",authentication);// 认证后的用户信息
String resStr = new ObjectMapper().writeValueAsString(resMap);
response.setContentType("application/json;charset=utf-8");
response.getWriter().write(resStr);
}
}
2.1.2 加入到配置 httpsecurity中管理
2.1.3 实现效果
2.2 认证失败后,返回一个ajax 数据
2.2.1 定义失败的LoginFailureHandler
千万别忘记把失败的handler注入到容器中
public class LoginFailureHandler implements AuthenticationFailureHandler {
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
Map<String,Object> resMap = new HashMap<>();
resMap.put("code","401");
resMap.put("msg",exception.getMessage());
String resStr = new ObjectMapper().writeValueAsString(resMap);
response.setContentType("application/json;charset=utf-8");
response.getWriter().write(resStr);
}
}
2.2.2 实现效果
三、退出登录
3.1 配置登出的url,默认就是logout
需要注意的是,该请求只能是一个get 方式,如果是post不支持
.and()
.logout()// 登出登录相关
.logoutUrl("/logout1")//登出的请求url
3.2 登录成功后访问 Hello.do页面效果
3.3 浏览器请求logout1请求结果,回到了登录页面
3.4 配置多个注销登录,支持post 和get
.logoutRequestMatcher(new OrRequestMatcher(
new AntPathRequestMatcher("/logoutget","GET")
,new AntPathRequestMatcher("/logoutpost","POST"))
)
目前设置了 logoutget 和 logoutpost 两个url都可以退出,一个是get方式,一个是post方式;
3.4.1 编写退出post 页面
编写 logout.html 页面
再次访问/hello.do 又回到登录页面了 ,get方法同理,需要资料的自行下载,项目打包成zip文件,包含前端页面,文档也已上传,均可下载;
如需下载对应源码: