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());
-
}
-
}
分享到:
相关推荐
Acegi文档 spring acegi 详细文档
Spring Acegi权限控制,安全系统就只包括两个问题: 认证和授权.
Spring ACEGI手册(部份) 博文链接:https://allenj2ee.iteye.com/blog/129321
Spring acegi 3 文档 Spring acegi 3 文档Spring acegi 3 文档 Spring acegi 3 文档
spring Acegi例子,很简单的一个acegi实例,容易理解
spring acegi 使用工程demo
Spring源代码解析(十):Spring_Acegi框架授权的实现.doc
前段时间复习了spring怎么做权限的技术,spring acegi 学习心得.记下来勉励自己.
spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行 spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行 spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行 spring_acegi精彩实例,带MYSQL数据库脚本,...
基于spring的Acegi安全框架认证与授权的分析及扩展.pdf
spring+acegi+中文手册spring+acegi+中文手册spring+acegi+中文手册spring+acegi+中文手册spring+acegi+中文手册spring+acegi+中文手册spring+acegi+中文手册spring+acegi+中文手册spring+acegi+中文手册spring+...
它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全系统能够轻松地适用于复杂的安全需求。 安全涉及到两个不同的概念,认证和授权。前者是关于...
Spring ACEGI手册
Acegi学习笔记--Acegi详解Acegi学习笔记--Acegi详解Acegi学习笔记--Acegi详解Acegi学习笔记--Acegi详解Acegi学习笔记--Acegi详解
NULL 博文链接:https://liaomin789.iteye.com/blog/581234
如何定义spring security的安全认证框架,对url和系统类method进行过滤以及权限分配和控制
它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全系统能够轻松地适用于复杂的安全需求。 安全涉及到两个不同的概念,认证和授权。前者是关于...
Acegi Security System for Spring