`

扩展Spring Security-用户密码自定义加密的快速实现

阅读更多

对于使用Acegi框架实现安全的开发人员,都会碰到用户密码加密的需求。数据库中存储的是加密后的密文,用户登录时需将输入的密码加密后在和数据库中的密文密码进行比对。

 

Acegi本身考虑的已经很周到了,提供了3中常用的密码加密方式,分别为Md5,Sha,Plaintext,由3个类分别实现

 

1.Md5PasswordEncoder - Md5方式

2.ShaPasswordEncoder - 哈西方式

3.PlaintextPasswordEncoder - 明文方式

 

使用起来也很简单,只需做简单的配置,例如:

 

	<bean id="daoAuthenticationProvider"
		class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
		<property name="userDetailsService" ref="jdbcDaoImpl" />
		<property name="userCache" ref="userCache" />
		<property name="passwordEncoder" ref="md5PasswordEncoder"  />
	</bean>
	
	<bean id="md5PasswordEncoder" class="org.acegisecurity.providers.encoding.Md5PasswordEncoder"/>

 

对于需要自己扩展自定义加密机制的人也很简单,只需要实现Acegi的org.acegisecurity.providers.encoding.PasswordEncoder 接口。其中有两个方法:

 

@实现加密的方法,既将明文转换为密文的方法

public abstract String encodePassword(String rawPass, Object salt)
    throws DataAccessException;

 

@验证密码是否有效的方法,返回'true'则登录成功

public abstract boolean isPasswordValid(String encPass, String rawPass, Object salt)
    throws DataAccessException;

 

例如:

 

public class JitPasswordEncoder implements PasswordEncoder {

	public String encodePassword(String rawPass, Object salt)
			throws DataAccessException {
		
		NetSignServer netSignServer = new NetSignServer();
		String pass = null;
		try {
			pass = netSignServer.NSHashAndBase64Encode(rawPass);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return pass;
	}

	public boolean isPasswordValid(String encPass, String rawPass, Object salt)
			throws DataAccessException {
		
		String pass1 = "" + encPass;
		String pass2 = encodePassword(rawPass, salt);
		return pass1.equals(pass2);
	}

}
 

其中encPass是数据库中保存的密码,rawPass是用户输入的密码,salt是生成密码时的种子,这个例子中我未用到。

流程是,当用户登录时,将调用isPasswordValid()方法验证登录凭证,isPasswordValid()方法将会调用encodePassword()方法将用户输入的密码进行加密,然后将数据库中所存密码和输入的加密后的密码进行比对,符合返回'true'则用户登录成功。

 

至此相信你已经掌握了如何实现如何在Acegi中自定义加密密码的方法,至于salt参数的使用有待后续讲解。

 

The end.

 

分享到:
评论
2 楼 Seraph115 2010-02-24  
t86 写道
为何我配置好自定义的加密方式后,始终进不了isPasswordValid这个函数,只有在输入的密码和数据库加密的密码一致时才能进入isPasswordValid这个函数,很费解,望指教


能否给出你的扩展类,配置信息及相关jar的列表,这样便于分析
1 楼 t86 2010-02-23  
为何我配置好自定义的加密方式后,始终进不了isPasswordValid这个函数,只有在输入的密码和数据库加密的密码一致时才能进入isPasswordValid这个函数,很费解,望指教

相关推荐

    spring-security Jar包

    8. **自定义扩展**:Spring Security 的设计是模块化的,允许开发者根据需求添加或替换组件,如认证提供者、授权策略、加密机制等,以适应各种复杂的安全场景。 9. **安全性配置**:配置Spring Security 主要通过...

    Spring-Security3.0自定义表结构

    ### Spring Security 3.0 自定义表结构详解 在企业级应用开发中,Spring Security作为Spring框架...通过以上步骤,开发者可以利用Spring Security 3.0实现高度定制化的权限管理方案,有效提升应用的安全性和用户体验。

    初识 Spring Security - v1.1.pdf

    - **用户信息从数据库获取**:通过自定义的`AuthenticationProvider`实现从数据库获取用户信息。 - **PasswordEncoder**:用于加密和验证用户密码的工具类。 ##### 7. **缓存 UserDetails** - **概念**:为了提高...

    spring-security-oauth-master

    《Spring Security OAuth2...总结,Spring Security OAuth2 是一个强大的安全框架,它提供了实现OAuth2协议的全面支持,帮助开发者构建安全、可扩展的授权系统。理解和掌握这些知识点,对于构建安全的Web应用至关重要。

    spring-boot-security

    6. **密码加密(Password Encoding)**:为了保护用户密码,Spring Security提供了一些内置的密码编码器,如BCryptPasswordEncoder或Pbkdf2PasswordEncoder,它们将明文密码转换为不可读的格式存储。 在Spring Boot...

    spring-security-4.1.2.RELEASE-dist.zip

    8. **社区支持**:Spring Security拥有活跃的社区和丰富的第三方扩展,使得开发者能够解决各种复杂的安全需求。 在具体使用Spring Security 4.1.2时,你需要按照以下步骤操作: 1. **添加依赖**:在你的Maven或...

    spring-security-samples-contacts-2.0.4

    - 密码加密:Spring Security通常使用BCrypt或PasswordEncoder来加密存储的密码。 5. **自定义登录页面** - Spring Security默认提供一个简单的登录页面,但你可以自定义HTML模板并配置它。 - 使用`loginPage()`...

    SpringSecurity-数据库认证-简单授权

    SpringSecurity提供了多种密码编码器,如BCryptPasswordEncoder,用于对用户密码进行加密存储。 在`configure(HttpSecurity http)`中,你可以定义访问控制规则。例如,使用`http.authorizeRequests()`来定义哪些URL...

    springboot+security+mybatis-plus实现自定义认证用户数据源的接口开发

    在本项目中,我们主要探讨如何使用Spring Boot、Spring Security以及MyBatis-Plus来构建一个自定义认证用户的接口开发。这些技术都是Java生态中非常流行且强大的工具,尤其适用于快速开发企业级应用。 首先,Spring...

    crafter-profile-spring-security-provider-2.3.3.zip

    6. **密码存储与加密(Password Storage & Encryption)**:Spring Security支持多种密码存储和加密算法,确保密码的安全性。 7. **自定义扩展**:Spring Security设计灵活,允许开发者根据需求自定义认证源、权限...

    spring-security-3.0.5.RELEASE

    1. **与Spring的整合**:Spring Security可以无缝地融入Spring应用,利用Spring的依赖注入和AOP特性,实现安全控制的灵活性和可扩展性。 2. **与Struts的结合**:通过拦截Struts的Action请求,Spring Security能够...

    spring-security-reference-4.0.1

    - **添加密码编码器**:为了提高安全性,通常会添加一个密码编码器来加密用户密码。 ##### 4.3 高级 Web 功能 - **记住我认证**:提供了一种机制,使用户在关闭浏览器后仍然保持登录状态。 - **HTTP/HTTPS 通道...

    spring-security-3.1.x.zip 源码下载

    这个"spring-security-3.1.x.zip"压缩包包含的是Spring Security 3.1版本的源代码,这对于开发者深入理解其工作原理、自定义功能或者排查问题非常有帮助。下面将详细探讨Spring Security的核心概念、主要组件以及3.1...

    spring-security-one完整版.rar

    Spring Security提供不同的方式来实现,如内存中、数据库中或者自定义的认证机制。 - **Authorization**:授权,确定用户是否有权限访问某个资源或执行某个操作。Spring Security通过访问决策管理器(Access ...

    spring-boot与spring-security整合的java代码

    这个例子可能包含了如何配置和扩展Spring Security的具体实践,比如自定义登录页面、处理异常、集成OAuth2等。 通过以上步骤,我们可以看到Spring Boot和Spring Security的整合并不复杂,但其背后隐藏着强大的安全...

    Spring Boot Security 2.5.8 实现账号、手机号、邮件登录,记住密码等功能

    2. **手机号登录**:为了适应移动互联网的需求,Spring Security可以通过扩展实现短信验证码或直接使用手机号作为身份验证的凭证。这通常涉及到与短信服务提供商的集成,以及对手机号的验证逻辑。 3. **邮箱登录**...

    spring-security4.0.zip

    - `thymeleaf-extras-springsecurity4-3.0.0.RELEASE.jar`: 使得Thymeleaf模板引擎能够与Spring Security无缝协作,方便地在页面上展示权限相关的控制。 10. **消息安全** - `spring-security-messaging-4.0.0....

    spring-security-3.0 GA

    1. 认证(Authentication):Spring Security 提供了一套完整的认证流程,包括用户身份验证、密码加密和权限校验等。3.0 GA 版本中,认证过程可通过ProviderManager 和 AuthenticationManager 实现,支持多种认证...

    Spring Security UserDetails实现原理详解

    理解`UserDetails`和`UserDetailsService`的工作原理对于有效地定制和扩展Spring Security的安全策略至关重要。通过深入学习和实践,我们可以更好地掌握Spring Security,确保应用程序的安全性。

Global site tag (gtag.js) - Google Analytics