spring security 入门基础,表单认证前后端分离

一、准备工作参考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文件,包含前端页面,文档也已上传,均可下载;

如需下载对应源码:

https://download.csdn.net/download/qq_36260963/89661306

  • 17
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星空寻流年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值