文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SpringSecurity中密码加盐怎么实现

2023-06-19 12:09

关注

这篇文章主要介绍“SpringSecurity中密码加盐怎么实现”,在日常操作中,相信很多人在SpringSecurity中密码加盐怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringSecurity中密码加盐怎么实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

密码加盐

密码要加盐处理,这是常识。各个权限处理框架对此都有不同程度的支持,Shiro、SpringSecurity都有自家的解决方案,SpringSecurity中有一个升级版的消息摘要:

BCryptPasswordEncoder

使用BCryptPasswordEncoder,即使相同的明文,生成的新的加密字符串都是不一样的,这样可以避免像在Shiro中那样我们自己配置密码的盐,SpringSecurity中使用BCryptPasswordEncoder的具体流程如下:

注册处理

在用户注册时,我们需要对密码进行处理,处理方式如下:

public int hrReg(String username, String password) {    //如果用户名存在,返回错误    if (hrMapper.loadUserByUsername(username) != null) {        return -1;    }    BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();    String encode = encoder.encode(password);    return hrMapper.hrReg(username, encode);}

通过BCryptPasswordEncoder中的encode方法对密码进行处理。

当用户注册成功之后,存在数据库中的密码就像下面这样:

SpringSecurity中密码加盐怎么实现

登录处理

密码加密处理之后,登录时候也要对密码进行处理,修改WebSecurityConfig类的configure(AuthenticationManagerBuilder auth)方法,改为下面这样即可:

@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {    auth.userDetailsService(hrService).passwordEncoder(new BCryptPasswordEncoder());}

异常统一处理

如果不是前后端分离,一般出了异常都很容易处理,直接跳转到相关的错误页面即可,现在前后端分离,出了异常,就不能再跳转到错误页面了,但是我们可以返回JSON呀!我们可以对服务端可能发生的异常进行统一处理。

举个栗子:

当管理员想要删除某一个角色的时候,如果该角色下尚有关联的用户或者资源,此时由于数据库中外键的约束会导致删除失败(我的业务逻辑就是如此,这里小伙伴不要和我扯cascade (*^_^*)),当删除失败时,会抛出一个DataIntegrityViolationException异常,我将这种异常捕获后统一处理。

处理方式如下:

自定义异常处理类

自定义异常处理类CustomExceptionResolver,如下:

public class CustomExceptionResolver implements HandlerExceptionResolver {    @Override    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse response, Object o, Exception e) {        ModelAndView mv = new ModelAndView(new MappingJackson2JsonView());        Map<String, String> map = new HashMap<>();        map.put("status", "error");        if (e instanceof DataIntegrityViolationException) {            map.put("msg", "该角色尚有关联的资源或用户,删除失败!");        }        mv.addAllObjects(map);        return mv;    }}

在这里接收到系统抛出的各种异常,判断异常的类型,根据不同的类型,返回不同的提示,当然,我这里只有一种情况。

将CustomExceptionResolver注册为一个Bean

将CustomExceptionResolver注册为Bean就比较简单了,可以直接在类上添加@Component注解,也可以通过Java进行配置,如下:

@Configurationpublic class WebMvcConfig extends WebMvcConfigurerAdapter {    @Bean    public CustomExceptionResolver customExceptionResolver() {        return new CustomExceptionResolver();    }}

到此,关于“SpringSecurity中密码加盐怎么实现”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯