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的基本架构。它主要包括以下组件: 1. **Filter Security Chain**:这是Spring ...
SpringSecurity是一个基于Spring的安全框架,能够提供身份验证、授权和加密等功能。在本文中,我们将使用SpringBoot+SpringSecurity来处理Ajax登录请求问题。 知识点2:Ajax登录请求问题 在前后端分离的开发模式...
Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于Java应用程序。它提供了全面的安全解决方案,包括用户认证、权限授权、会话管理、CSRF防护以及基于HTTP的访问控制。在这个例子中,我们将...
Spring Security:spring家族一员。是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转...
Spring Security 提供了两种实现方式:基于散列的令牌方法和基于持久化的令牌方法。前者更安全,后者更方便。 12. **OAuth 2.0 认证的原理与实践**: - OAuth 2.0 是一个开放标准,用于授权第三方应用访问用户资源...
这个简单的示例为初学者提供了一个了解Spring MVC和Spring Security交互的基础平台,有助于理解这两个框架在实际项目中的作用和集成方式。通过深入研究和实践,可以进一步提升Web应用的安全性和可维护性。
### 初识 Spring Security #### 一、Spring Security 概述 **Spring Security**是一种广泛应用于Java企业级项目中的安全框架,它基于Spring AOP(面向切面编程)和Servlet过滤器来提供全面的安全解决方案。该框架...
SpringSecurity是Java领域中一款强大的安全框架,广泛用于构建安全的Web应用。它提供了一整套解决方案,包括认证、授权、会话管理以及防止常见攻击等。本教程将基于IntelliJ IDEA(IDEA)和SpringBoot来详细介绍如何...
Spring Security是一个功能强大且广泛应用的Java安全框架,它提供了许多功能,包括身份验证、授权、加密等。其中,权限控制是Spring Security的一个重要组件,它允许开发者根据用户角色和权限来控制访问不同的资源...
8. **自定义扩展**:Spring Security 的设计是模块化的,允许开发者根据需求添加或替换组件,如认证提供者、授权策略、加密机制等,以适应各种复杂的安全场景。 9. **安全性配置**:配置Spring Security 主要通过...
【Spring Security 把授权信息写入数据库】 Spring Security是一个强大的安全管理框架,用于处理Java应用程序的安全需求,包括认证和授权。在从Acegi安全框架转换到Spring Security 2.0时,一个重要的变化就是如何...
在提供的压缩包`springsecurity配置demo`中,你将找到示例代码和详细说明,这将帮助你更好地理解和实践上述概念。通过学习和实践这些示例,你将能够为自己的Spring应用程序构建强大的安全防护。
SpringSecurity 是一个强大的且高度可定制的身份验证和访问控制框架,用于保护基于Java的应用程序。在本示例中,我们将探讨如何使用 SpringSecurity 构建一个基本的认证和授权流程。 首先,Spring Security 的核心...
为了实现身份验证,Spring Security支持多种方式,如基于表单的登录、JWT(JSON Web Tokens)或者OAuth2。在这个例子中,我们使用了基于表单的登录。这意味着Spring Security会自动处理登录表单的提交,并尝试验证...
项目中使用到的技术包含SpringBoot、SpringSecurity&oauth2(安全资源和授权中心模式、包括登录接口自定义返回字段、自定义手机号+密码登录、自定义免密登录)、Queue队列、线程池、xss攻击配置、SpringCache、Mybatis...
**Spring Security 概述** Spring Security 是一个强大的且高度可定制的身份验证和访问控制框架,专为 Java 应用程序设计。它提供了全面的安全解决方案,包括登录、授权、权限管理等,广泛应用于Web应用程序和企业...
- **加密保护**:Spring Security提供了多种加密方式,包括MD5、SHA-1等,用于密码的存储和传输安全。 - **HTTPS安全控制**:在配置中添加对HTTPS的支持,确保数据传输过程中的安全性,特别是在处理敏感信息时尤为...
Spring Security还支持CSRF防护、Remember Me服务、基于角色的访问控制(RBAC)、密码加密等多种高级特性。通过这个例子,开发者可以学习如何在实际项目中配置和使用这些特性,提高应用的安全性。 总的来说,Spring...
在Spring Security OAuth2.0中,JWT可以用来作为访问令牌,它通过数字签名或数字签名与加密相结合的方式,确保了令牌的安全性。 在Spring Security的学习和应用中,理解`HttpSecurity`配置项是进行安全配置的重要...