Acegi 对于密码提供三种方式:明文及不采用任何加密方式、MD5加密方式、哈希算法加密方式。
只需要在DAO的认证管理器中分别加入以下对应配置:
第一种:不使用任何加密方式的配置
- <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
-
<property name="userDetailsService" ref="userDetailsService" />
-
- <!-- 明文加密,不使用任何加密算法, 在不指定该配置的情况下,Acegi默认采用的就是明文加密 -->
- <!--
-
<property name="passwordEncoder">
-
<bean class="org.acegisecurity.providers.encoding.PlaintextPasswordEncoder">
-
<property name="ignorePasswordCase" value="true"></property>
- </bean>
- </property>
- -->
- </bean>
第二种:MD5方式加密
- <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
-
<property name="userDetailsService" ref="userDetailsService" />
-
-
<property name="passwordEncoder">
-
<bean class="org.acegisecurity.providers.encoding.Md5PasswordEncoder">
-
<!-- false 表示:生成32位的Hex版, 这也是encodeHashAsBase64的, Acegi 默认配置; true 表示:生成24位的Base64版 -->
-
<property name="encodeHashAsBase64" value="false" />
- </bean>
- </property>
- </bean>
第三种:使用MD5加密,并添加全局加密盐
- <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
-
<property name="userDetailsService" ref="userDetailsService" />
-
-
<property name="passwordEncoder">
-
<bean class="org.acegisecurity.providers.encoding.Md5PasswordEncoder">
-
<property name="encodeHashAsBase64" value="false" />
- </bean>
- </property>
-
- <!-- 对密码加密算法中使用特定的加密盐及种子 -->
-
<property name="saltSource">
-
<bean class="org.acegisecurity.providers.dao.salt.SystemWideSaltSource">
-
<property name="systemWideSalt" value="acegisalt" />
- </bean>
- </property>
- </bean>
第四种:使用MD5加密,并添加动态加密盐
- <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
-
<property name="userDetailsService" ref="userDetailsService" />
-
-
<property name="passwordEncoder">
-
<bean class="org.acegisecurity.providers.encoding.Md5PasswordEncoder">
-
<property name="encodeHashAsBase64" value="false" />
- </bean>
- </property>
-
- <!-- 对密码加密算法中使用特定的加密盐及种子 -->
-
<property name="saltSource">
- <!-- 通过动态的加密盐进行加密,该配置通过用户名提供加密盐, 通过UserDetails的getUsername()方式 -->
-
<bean class="org.acegisecurity.providers.dao.salt.ReflectionSaltSource">
-
<property name="userPropertyToUse" value="getUsername" />
- </bean>
- </property>
- </bean>
第五种:使用哈希算法加密,加密强度为256
- <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
-
<property name="userDetailsService" ref="userDetailsService" />
-
-
<property name="passwordEncoder">
-
<bean class="org.acegisecurity.providers.encoding.ShaPasswordEncoder">
-
<constructor-arg value="256" />
-
<property name="encodeHashAsBase64" value="false" />
- </bean>
- </property>
- </bean>
第六种:使用哈希算法加密,加密强度为SHA-256
- <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
-
<property name="userDetailsService" ref="userDetailsService" />
-
-
<property name="passwordEncoder">
-
<bean class="org.acegisecurity.providers.encoding.ShaPasswordEncoder">
-
<constructor-arg value="SHA-256" />
-
<property name="encodeHashAsBase64" value="false" />
- </bean>
- </property>
- </bean>
上述配置只是在Acegi通过表单提交的用户认证信息中的密码做各种加密操作。而我们存储用户密码的时候,可以通过一下程序完成用户密码操作:
- package com.brofe.acegi;
-
-
import org.acegisecurity.providers.encoding.Md5PasswordEncoder;
-
import org.acegisecurity.providers.encoding.ShaPasswordEncoder;
-
-
-
public class TestPasswordEncoder {
-
-
public static void main(String[] args) throws Exception {
-
-
md5(); // 使用简单的MD5加密方式
-
-
sha_256(); // 使用256的哈希算法(SHA)加密
-
-
sha_SHA_256(); // 使用SHA-256的哈希算法(SHA)加密
-
-
md5_SystemWideSaltSource(); // 使用MD5再加全局加密盐加密的方式加密
- }
-
-
-
public static void md5() {
-
Md5PasswordEncoder md5 = new Md5PasswordEncoder();
-
// false 表示:生成32位的Hex版, 这也是encodeHashAsBase64的, Acegi 默认配置; true 表示:生成24位的Base64版
-
md5.setEncodeHashAsBase64(false);
-
String pwd = md5.encodePassword("123", null);
-
System.out.println("MD5: " + pwd + " len=" + pwd.length());
- }
-
-
-
public static void sha_256() {
-
ShaPasswordEncoder sha = new ShaPasswordEncoder(256);
-
sha.setEncodeHashAsBase64(false);
-
String pwd = sha.encodePassword("123", null);
-
System.out.println("哈希算法 256: " + pwd + " len=" + pwd.length());
- }
-
-
-
public static void sha_SHA_256() {
-
ShaPasswordEncoder sha = new ShaPasswordEncoder();
-
sha.setEncodeHashAsBase64(false);
-
String pwd = sha.encodePassword("123", null);
-
System.out.println("哈希算法 SHA-256: " + pwd + " len=" + pwd.length());
- }
-
-
-
public static void md5_SystemWideSaltSource () {
-
Md5PasswordEncoder md5 = new Md5PasswordEncoder();
-
md5.setEncodeHashAsBase64(false);
-
-
// 使用动态加密盐的只需要在注册用户的时候将第二个参数换成用户名即可
-
String pwd = md5.encodePassword("123", "acegisalt");
-
System.out.println("MD5 SystemWideSaltSource: " + pwd + " len=" + pwd.length());
- }
- }
分享到:
相关推荐
Spring security的完整使用范例,支持自定义密码的加密方式,以及成功,失败的处理。是一个完整可运行的工程,码云似乎还要注册。后期考虑下用码云
Spring Security:spring家族一员。是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转...
项目中使用到的技术包含SpringBoot、SpringSecurity&oauth2(安全资源和授权中心模式、包括登录接口自定义返回字段、自定义手机号+密码登录、自定义免密登录)、Queue队列、线程池、xss攻击配置、SpringCache、Mybatis...
SpringBoot2.0+SpringSecurity5.1.5.RELEASE+MybatisPlus3.1.1的基础登陆代码 登陆账号123 密码123 密码使用springsecruity提供的加密方式加密 前端使用thymeleaf+bootstrap 提供登陆后成功页面 sql文件在db下 仅供...
基于SpringSecurity+springMVC+mybatis+mysql实现。基于SpringSecurity权限控制的简单工程DEMO。maven构建,用户信息存储在mysq数据库中
Spring Boot 整合 Spring Security 包含认证,授权,加密,验证码,前后端分离,记住密码,自定义组件等
spring security权限管理。 aop日志记录。 4、调度 ====== Spring task, 可以查询已经注册的任务。立即执行一次任务。 5、缓存和Session =========== 注解redis缓存数据,Spring-session和redis实现分布式...
16. acegi到spring security的转换方式 16.1. Spring Security是什么 16.2. 目标 16.3. 步骤 16.4. 总结 V. 高级话题 17. 领域对象安全(ACLs) 17.1. 概述 17.2. 关键概念 17.3. 开始 18. 预认证...
百度网盘,[Chapte5]Spring Security开发安全的REST服务视频教程,第5章,无加密
35. Spring Security加密模块 257 35.1简介 257 35.2加密器 257 35.2.1 BytesEncryptor 257 35.2.2 TextEncryptor 258 35.3关键发电机 258 35.3.1 BytesKeyGenerator 258 35.3.2 StringKeyGenerator 259 35.4密码...
SpringSecurity 全套开发,设计源码解读,整个拦截器链分析,QQ登录,微信登录,短信验证,短信登录,在security基础上学习写一个自定义验证授权设计模式,整套视频讲解的分享细致认真,非常值得学习。不管小白还是...
1、搭建基本的Spring Security项目 2、使用数据库管理用户权限 3、自定义认证数据库表结构 4、自定义登录页面 5、使用数据库管理资源 6、控制用户信息 MD5加密 获取当前用户信息 7、自定义访问拒绝页面 8、动态...
摘要认证的密码加密通用密码加密Remember-Me(记住我)认证:基于散列的令牌方法Remember-Me(记住我)认证:基于持久化的令牌方法OAuth 2.
spring security 结合cas 单点登录系统 cas客户端的配置文件
课程内容主要分为: 安全入门,认证授权的概念,在SpringBoot中使用Security,加密处理,基于数据库的认证和授权,Spring Security中使用Thymeleaf自定义登录页面,通过过滤器集成图片验证码,Base64和JWT的学习,...
本项目基于Spring,整合Spring的security模块,实现用户管理和权限控制,是一套较为通用的权限控制功能,主要内容如下: 1.登录,包括“记住我”的功能; 2.加密,存储的密码不采用明文,初始密码1234; 3.拦截器...
1.1. Spring Security是什么? 1.2. 历史 1.3. 发行版本号 1.4. 获得Spring Security 1.4.1. 项目模块 1.4.1.1. Core - spring-security-core.jar 1.4.1.2. Web - spring-security-web.jar 1.4.1.3. Config -...
spring security针对该功能有两种实现方式,一种是简单的使用加密来保证基于 cookie 的 token 的安全,另一种...这篇文章主要给大家介绍了关于spring security 5.x实现兼容多种密码的加密方式,需要的朋友可以参考下。
主要介绍了Spring security密码加密实现代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
16. acegi 到spring security 的转换方式 16.1. Spring Security 是什么 16.2. 目标 16.3. 步骤 16.4. 总结 V. 高级话题 17. 领域对象安全(ACLs) 17.1. 概述 17.2. 关键概念 17.3. 开始 18. 预...