在上一篇文章中,我们使用jdbc和md5密码编码将密码编码添加到了我们的spring安全配置中。

但是,在定制UserDetailsS​​ervices的情况下,我们需要对安全配置进行一些调整。
我们需要创建一个DaoAuthenticationProvider bean,并将其设置为AuthenticationManagerBuilder。

由于我们需要一个Custom UserDetailsS​​ervice,因此我将使用Spring Security / MongoDB示例代码库。

我们要做的是更改我们的Spring Security配置。

package com.gkatzioura.spring.security.config;import com.gkatzioura.spring.security.service.CustomerUserDetailsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.authentication.encoding.Md5PasswordEncoder;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;import javax.sql.DataSource;/*** Created by gkatzioura on 10/5/16.*/
@EnableWebSecurity
@Profile("encodedcustompassword")
public class PasswordCustomEncodedSecurityConfig extends WebSecurityConfigurerAdapter {@Beanpublic UserDetailsService mongoUserDetails() {return new CustomerUserDetailsService();}@Beanpublic DaoAuthenticationProvider authProvider() {DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();authProvider.setUserDetailsService(mongoUserDetails());authProvider.setPasswordEncoder(new BCryptPasswordEncoder());return authProvider;}@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.authenticationProvider(authProvider());}@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/public").permitAll().anyRequest().authenticated().and().formLogin().permitAll().and().logout().permitAll();}}

在大多数情况下,这可以。 但是,我们也可能希望推出自己的PasswordEncoder,这非常简单。

package com.gkatzioura.spring.security.encoder;import org.springframework.security.crypto.bcrypt.BCrypt;
import org.springframework.security.crypto.password.PasswordEncoder;/*** Created by gkatzioura on 10/5/16.*/
public class CustomPasswordEncoder implements PasswordEncoder {@Overridepublic String encode(CharSequence rawPassword) {String hashed = BCrypt.hashpw(rawPassword.toString(), BCrypt.gensalt(12));return hashed;}@Overridepublic boolean matches(CharSequence rawPassword, String encodedPassword) {return BCrypt.checkpw(rawPassword.toString(), encodedPassword);}}

因此,我们将更改配置以使用新的PasswordEncoder

@Beanpublic DaoAuthenticationProvider authProvider() {DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();authProvider.setUserDetailsService(mongoUserDetails());authProvider.setPasswordEncoder(new CustomPasswordEncoder());return authProvider;}

下一步将是创建编码后的密码。

@Testpublic void customEncoder() {CustomPasswordEncoder customPasswordEncoder = new CustomPasswordEncoder();String encoded = customPasswordEncoder.encode("custom_pass");LOGGER.info("Custom encoded "+encoded);}

然后将具有哈希密码的用户添加到我们的mongodb数据库中。

db.users.insert({"name":"John","surname":"doe","email":"john2@doe.com","password":"$2a$12$qB.L7buUPi2RJHZ9fYceQ.XdyEFxjAmiekH9AEkJvh1gLFPGEf9mW","authorities":["user","admin"]})

我们所需要做的就是更改gradle脚本上的默认配置文件,我们一切顺利。

bootRun {systemProperty "spring.profiles.active", "encodedcustompassword"
}

您可以在github上找到源代码。

翻译自: https://www.javacodegeeks.com/2016/10/spring-security-custom-password-encoding.html

Spring Security和自定义密码编码相关推荐

  1. Spring全家桶-Spring Security之自定义数据库表认证和鉴权

    Spring全家桶-Spring Security之自定义数据库表认证和鉴权 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供 ...

  2. Spring Security中的密码安全

    Spring Security中的密码安全 PasswordEncoder 接口 在 Spring Security 中,PasswordEncoder 接口代表的是一种密码编码器,其核心作用在于指定 ...

  3. SpringSecurity权限管理框架系列(六)-Spring Security框架自定义配置类详解(二)之authorizeRequests配置详解

    1.预置演示环境 这个演示环境继续沿用 SpringSecurit权限管理框架系列(五)-Spring Security框架自定义配置类详解(一)之formLogin配置详解的环境. 2.自定义配置类 ...

  4. Spring Security OAuth2——自定义OAuth2第三方登录(Gitee)并与UsernamePassword登录关联解决方案

    前文:Spring Security OAuth2--自定义OAuth2第三方登录(Gitee) Maven 主要 <!--Spring Security--><dependency ...

  5. spring security webflux 自定义登录页面

    spring security webflux 自定义登录页面 ************************* 相关类及接口 ServerHttpSecurity public class Ser ...

  6. Spring Security是什么? - 密码认证(四)

    在 Spring Security当中,认证的过程,首先是获取用户名,然后通过用户名在数据库当中获取到用户的完整信息,然后根据用户信息再去 比对用户的密码.从源代码当中可以看出,密码的认证过程是有sp ...

  7. 使用Spring Security 5进行密码编码器迁移

    最近,我在一个使用自定义PasswordEncoder的项目中工作,需要将其迁移到bcrypt . 当前的密码存储为hash ,这意味着不可能将其还原为原始的String –至少不是简单的方法. 这里 ...

  8. Spring Security实现用户名密码验证的原理

    title: Spring Security date: 2019-08-05 16:40:27 categories: 后端 tags: 后端 权限管理 Spring Security Spring ...

  9. spring security认证对密码进行MD5认证

    在上一篇中写了如何自定义数据库用户表结构,这里补充一下怎么对用户输入的密码进行MD5认证,在老版本的spring security(笔者使用的是org.springframework.security ...

最新文章

  1. amp 保留指定位c语言,C语言位运算符学习
  2. 浅谈Jquery中的bind(),live(),delegate(),on()绑定事件方式
  3. 什么是IaaS, PaaS和SaaS及其区别
  4. html5长按保存,iOS UIWebView仿微信H5页面实现长按保存图片功能
  5. 2014年第五届蓝桥杯C/C++ A组国赛 —— 第三题:日期差
  6. Java 中的目录创建处理
  7. 作者:王长波,华东师范大学教授、博士生导师、软件学院常务副院长。
  8. git 应用 创建分支 并切换分支
  9. 畅通工程(最小生成树模板)
  10. varnish 4.0 官方文档翻译17-Hashing
  11. 【vue开发问题-解决方法】(一)在style中设置background-image时路径问题
  12. iOS版本更新的方法
  13. Atitit 存储方法大总结 目录 1. 存储方式分类 2 1.1. 按照数据分类为 结构化 半结构化 非结构化 2 1.2. 按照内外部可分类 内部存储和外部存储持久化 2 1.3. 按照本地远
  14. MySQL数据类型详解
  15. 嵌入式课程 之 霍尔传感器(编码器)实验
  16. U盘容量变小后修复的方法
  17. 数据结构--哈希(Hash)和代码实现(详解)
  18. Python将单一数字标签进行one-hot编码
  19. 盘点机器人四大家族——KUKA机器人
  20. 关于互联网的一些观点想法

热门文章

  1. Java 8新特性——default方法(defender方法)介绍
  2. 漫画:什么是SnowFlake算法
  3. springboot点击运行没反应,什么都不显示的解决方式
  4. 20级四班班级管理规章制度
  5. 使用JDBCTemplate实现与Spring结合,方法公用 ——共用实现类(BaseImpl)
  6. 2018蓝桥杯省赛---java---C---4( 第几个幸运数)
  7. linux跑循环脚本占内存,Linux下实现脚本监测特定进程占用内存情况
  8. JAVA代码实现按列表中元素的时间字段排序
  9. 解决:Could not find metadata org.apache.maven.plugins:maven-archetype-plugin/maven-metadata.xml in loc
  10. eclipse 创建ssm spring+springmvc+mybatis 实现登录注册