5.SSM+springSecurity与数据库连接实现动态角色权限控制之细节处理

我们接着上一篇博客SSM+springSecurity与数据库连接实现动态角色权限控制来实现springSecurity与数据库连接实现动态角色权限控制的一些细节

1. 实现密码加密,解密

  • springSecurity内部提供了PasswordEncoder接口,其中定义了两个方法
 public interface PasswordEncoder {
   
 	//对密码进行加密(相同密码会被加密成不同的结果)
    String encode(CharSequence var1);
	//对输入的密码,与数据库密码进行对比
    boolean matches(CharSequence var1, String var2);
}
  • 首先我们写一个测试方法,将数据库的密码进行加密:
    BCryptPasswordEncoder类是PasswordEncoder的实现类
@Test
    public void updateUser(){
   
        SysUserEntity user=new SysUserEntity();
        user.setUsername("user2");
        PasswordEncoder passwordEncoder=new BCryptPasswordEncoder();
        String encode = passwordEncoder.encode("123");
        user.setPassword(encode);
        userMapper.updateUser(user);

    }

编写dao层的接口以及mapper.xml文件中的sql:

	<update id="updateUser" parameterType="SysUserEntity" >
        update sys_user set password=#{password} where username=#{username}
    </update>

运行测试方法,将user1与user2的密码进行加密(密码均为123),加密后如图:
在这里插入图片描述
在实际项目中,此逻辑只需要写入注册用户的controller中即可

  • 登录时对用户输入的密码与数据库中的密码进行比对,这里比对的方法已经在security内部实现了,我们只需要告诉security我们使用的哪一种加密方式。

在AppicationContext.xml或者springSecurity.xml中添加BCryptPasswordEncoder的配置:

 <bean id="bCryptPasswordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>

在springSecurity.xml中引入加密方式即可:
在这里插入图片描述
重启项目,进行测试,输入密码输入123,登录成功!

2. 当用户名或者账号输入错误时,进行提示
目前用户名或者账号输入错误,会直接跳转至localhost:8080/ss2/user/login?error页面,于是我们可以仍然跳转至login页面,但是error带上值rue,到达页面时判断参数error是否有值,有值则说明账号或者密码输入错误
在这里插入图片描述

  • 设置认证失败的地址

在springSecurity.xml中的form-lofgin标签中设置认证失败的地址:

<!-- 使用form-login的方式进行登录认证 -->
<security:form-login login-page="/user/login" authentication-failure-forward-url="/user/login?error=true"/>
  • 编写前端login页面逻辑
    在这里插入图片描述
    重启项目,输入错的账号或者密码:
    在这里插入图片描述

3. 以上登录逻辑我么采用的是同步登录,下面进行改造成异步登录

  • 引入js
    在这里插入图片描述

  • 修改springMvc.xml,增加下面的标签对静态资源放行

 <mvc:default-servlet-handler/>
  • 编写处理认证成功、认证失败的处理器
    在这里插入图片描述
public class MyAuthenticationFailureHandler implements AuthenticationFailureHandler {
   
    @Override
    public void onAuthenticationFailure(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AuthenticationException e) throws IOException, ServletException {
   
        Map<String,Object> map=new HashMap<>(2);
        map.put("success",false);
        map.put("mes","登录失败");
        String reslut = JSONObject.toJSONString(map);
        httpServletResponse.setContentType("text/json;charset=utf-8");
        httpServletResponse.getWriter().write(reslut);
    }
}
public class MyAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
   
    @Override
    public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {
   
        Map<String,Object> map
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值