分布式微服务专栏008(springboot中集成BCrypt密码加密& jjwt&自定义注解(拦截器))

欢迎大家加入我的github项目,一起学习,一起发展
---> 全栈工程师进阶学习站
---> 我的前端学习笔记
--->行业内最新最群的报告,工作日每日更新

—>原生 js 训练计划

分布式微服务专栏008(springboot中集成BCrypt密码加密& jjwt&自定义注解(拦截器))

项目地址 (欢迎交流)

https://github.com/xunyegege/Backend_development/tree/master/token

1.BCrypt密码加密

(1)加密算法介绍

任何应用考虑到安全,绝不能明文的方式保存密码。密码应该通过哈希算法进行加密。
有很多标准的算法比如SHA或者MD5,结合salt(盐)是一个不错的选择。 Spring Security
提供了BCryptPasswordEncoder类,实现Spring的PasswordEncoder接口使用BCrypt强
哈希方法来加密密码。
BCrypt强哈希方法 每次加密的结果都不一样。

(2)添加依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
         <!--        解决JDK版本过高的问题 大于8 -->
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.0</version>
        </dependency>
       <!--        解决JDK版本过高的问题-->

(3)配置

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
   

    @Override
    protected void configure(HttpSecurity http) throws Exception {
   

        http.authorizeRequests()
            .antMatchers("/**").permitAll()
            .anyRequest().authenticated()
            .and().csrf().disable();
    }

    @Bean
    public BCryptPasswordEncoder bcryptPasswordEncoder() {
   

        return new BCryptPasswordEncoder();
    }

(4)加密解密代码

加密
String newpassword = encoder.encode(admin.getPassword());//加密后的密码
解密判断(返回boolean类型,无法获得明文)
Boolean result=encoder.matches(password,admin.getPassword())  
//源码   matches(CharSequence rawPassword(原密码), String encodedPassword(加密后的密码))

(5)SpringBoot项目下的小问题

项目跑起来后打开页面会让你输入账户密码,这是security自带的验证

密码会打印在控制台,如:Using default security password: 40016cca-8d5d-40ca-a4c8-ae6184c97856

账户是 user

(6)注册(service层)代码

    @Autowired   //使用前注入
    private BCryptPasswordEncoder encoder;

    @Override
    public int register(User user) {
   
       user.setPassword(encoder.encode(user.getPassword()));
        return userMapper.insertSelective(user);
    }

(7)登录验证(service层)代码

    @Autowired  //使用前注入
    private BCryptPasswordEncoder encoder;

    @Override
    public User login(String userName, String password) {
   
        User user = userMapper.selectByUserName(userName);
        if (null !=user && encoder.matches(password,user.getPassword())){
   
            return user;
        }
        return null;
    }

(8)数据库实际效果

image-20191004152643167


2.JJWT实现无状态登录

(1)JWT介绍

JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用
户和服务器之间传递安全可靠的信息。

(2)JWT的组成

一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。

头部

头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。这也可以
被表示成一个JSON对象。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值