`

用acegi加密你的密码

    博客分类:
  • Java
阅读更多

基于Acegi的权限控制系统跑起来了,但是保存在数据库中的密码还是明文的形式,要将密码加密一下才行哦,要不用户的密码很容易就泄漏出去了。在google上查了很多相关的文章,建议在spring的配置文件中加入以下bean

<bean class="org.acegisecurity.providers.encoding.Md5PasswordEncoder" id="passwordEncoder"></bean>

搞了半天没有成功,没有那篇文章是介绍的比较详细的,郁闷的是大多文章都是出自某人之手,然后一堆的转载!

本来acegi已经够复杂的,现在又要往里面加入bean就变得更加复杂了。何不自己来做转换呢?这样思路很清晰,而且控制力度加强了。一堆的配置文件不比一堆代码好理解多少。

开始动手了,思路1

通过改造userentity类,使得action获得的是加密过的字符串,但是在查找用户名密码的时候hibernate在查询后看见实体类的密码变了,将密码自动update了一次。失败了!

思路2

1、             updatesave的时候用户在输入密码的时候在将密码进行转换,保存在数据库中的是加密过的字符串。

2、             在登陆的时候将用户输入的密码加密后再跟数据库中的密码进行比较。

3、             扩展authenticationProcessingFilter,因为验证的代码放在authenticationProcessingFilterdoFilter中。

登陆操作:

authenticationProcessingFilterobtainPassword方法中,如果password不为空意味着用户进行的是登陆操作,将password加密先。

    String id=getBiz().saveUser(Md5Password(user), state);<o:p></o:p>

…….<o:p></o:p>

protected String obtainPassword(HttpServletRequest request) {<o:p></o:p>

       String password=request.getParameter(ACEGI_SECURITY_FORM_PASSWORD_KEY);<o:p></o:p>

       if(password!=null){<o:p></o:p>

            return MD5.toMD5(request.getParameter(ACEGI_SECURITY_FORM_PASSWORD_KEY));<o:p></o:p>

       }<o:p></o:p>

           return password;<o:p></o:p>

    }<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

保存操作:

useraction中通过页面获得了user的实体类。如果密码不为空那就重新设置一下密码吧

    private User Md5Password(User user){<o:p></o:p>

       if(user.getPassword()!=null){<o:p></o:p>

           user.setPassword(MD5.toMD5(user.getPassword()));         return user;<o:p></o:p>

       }<o:p></o:p>

       return user;<o:p></o:p>

    }<o:p></o:p>

<o:p> </o:p>

Update操作更简单了:

getBiz().updateUserPassowrd(user.getId(), MD5.toMD5(user.getPassword()), state);

只是需要将密码加密后传给后台的方法,由后台保存到数据库中。

<o:p> </o:p>

总结:saveupdate是比较简单的,关键在与登陆的过程获得密码的地方。因为数据库中的密码是加密过的,所以在送用户密码去验证之前要将用户传过来的密码加密一次,以下就是验证密码部分代码。

                UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username,<o:p></o:p>

                        password);<o:p></o:p>

                setDetails(httpRequest, authRequest);<o:p></o:p>

                httpRequest.getSession().setAttribute(ACEGI_SECURITY_LAST_USERNAME_KEY,username);<o:p></o:p>

                authResult = this.getAuthenticationManager().authenticate(authRequest);

<o:p> </o:p>

分享到:
评论
2 楼 vip01 2007-10-19  
楼上正解
1 楼 liangguanhui 2007-10-19  
本省已经提供了MD5和SHA的加密provider

<bean id="passwordEncoder" class="org.acegisecurity.providers.encoding.Md5PasswordEncoder" />

相关推荐

    acegi 完整实例

    它使用安全哈希函数和盐值来加密密码,确保即使数据被窃取,也无法轻易解密。 5. **缓存**:Acegi可以集成缓存机制,如 EhCache 或者其他的缓存解决方案,以提高性能,减少对数据库的频繁访问。例如,它可能缓存已...

    acegi-sample.rar_acegi

    为了保护用户凭证,Acegi支持多种密码加密策略,如MD5、SHA等,确保存储在数据库中的密码安全。 5. **自定义安全组件**: Acegi的灵活性体现在允许开发者自定义安全组件,如认证Provider、权限Evaluator等,以...

    acegisecurity-1.0.7

    另外,还包括了密码加密服务,确保密码在存储和传输过程中的安全性。 五、与其他Spring组件的集成 Acegi Security可以无缝集成Spring MVC、Spring JDBC、Spring ORM等组件,简化了开发流程。例如,它可以与Spring的...

    acegi basic认证具体demo

    `passwordEncoder`是密码编码器,用于在存储和验证用户密码时进行加密。 `&lt;http&gt;`标签配置了安全拦截规则,`use-expressions="true"`允许使用表达式进行权限控制,`intercept-url`定义了所有请求都需要认证才能访问...

    acegi-security-tiger-1.0.7.jar

    5. **密码加密与存储**:Acegi Security支持多种密码哈希算法,确保密码在存储时的安全性,防止因数据泄露导致密码明文暴露。 6. **异常处理**:框架内建了统一的异常处理机制,当出现安全相关的异常时,如认证失败...

    acegi rememberMe和退出

    因此,应使用足够强度的加密算法对Remember Me令牌进行加密,并设定合理的过期时间,避免长时间记住用户身份。 在Acegi Security的源码中,可以深入理解这些组件的工作原理,了解如何实现和自定义它们。对于工具类...

    Acegi-security-samples-tutorial-1.0.7.zip 实例代码解析

    此外,Acegi Security还支持密码加密、会话管理、CSRF防护等功能。通过这个教程,开发者不仅可以了解Acegi Security的基本用法,还能深入理解Web应用安全的原理和实践。 总的来说," Acegi-security-samples-...

    Spring ACEGI手册(部份)

    5. **密码加密**: 提供了多种密码加密算法,保证用户密码的安全存储。 6. **记住我(Remember-me)功能**: 用户可以选择在一段时间内免密登录。 **集成Spring MVC** 在Spring MVC环境中,Spring ACEGI可以通过...

    acegi-security.jar.zip

    3. **密码加密**:支持多种密码编码方式,增强密码安全性。 4. **会话管理**:检测并防止会话劫持、会话固定攻击。 5. **认证机制**:支持多种认证方式,如基于表单的认证、HTTP基本认证、LDAP认证等。 6. **过滤器...

    acegi学习整理合集

    - Spring - Java - JavaEye论坛.mht"则可能专注于Acegi的认证过程,这包括用户登录、密码加密、以及不同类型的认证机制,如基于内存的认证、JDBC认证等。认证是确保用户身份的关键步骤,Acegi提供了灵活且可扩展的...

    使用 Acegi 保护 Java 应用程序: 续三

    表单认证通常涉及用户输入用户名和密码,然后 Acegi 使用这些信息与存储在数据库或其他凭证存储中的信息进行匹配。在配置 Acegi 时,我们需要定义一个 `AuthenticationProvider`,例如 `JdbcAuthenticationProvider`...

    Acegi 概述

    **密码加密**:Acegi内置了多种密码编码器,如MD5和SHA家族,确保存储在数据库中的密码是经过加密的。同时,还可以自定义编码器以适应更高级的加密算法。 在实际应用中,开发者通常需要编写安全相关的配置,包括...

    acegi 安全框架实例

    Acegi的核心功能包括用户身份验证、访问控制、会话管理以及密码加密等,使得开发者能够更方便地实现应用的安全需求。 首先,我们来了解一下Acegi的基本架构。Acegi安全框架主要由以下几个组件构成: 1. **...

    jasypt API Docs 1.9 (CHM格式)

    根据Jasypt文档,该技术可用于加密任务与应用程序,例如加密密码、敏感信息和数据通信、创建完整检查数据的sums. 其他性能包括高安全性、基于标准的加密技术、可同时单向和双向加密的加密密码、文本、数字和二进制...

    最简单acegi权限管理实例

    此外,Acegi还提供了会话管理、CSRF防护、密码加密等功能,增强了应用的安全性。会话管理可以防止会话劫持和会话固定攻击,而CSRF防护则可以防止跨站请求伪造。 总的来说,这个"最简单acegi权限管理实例"是一个很好...

    Acegi框架介绍.rar

    1. **URL访问控制**:使用Acegi可以限制某些URL只能由特定角色的用户访问。 2. **方法访问控制**:在Service或DAO层,对方法添加安全注解,控制只有特定用户或角色可以调用。 3. **会话超时和固定令牌**:防止会话...

    acegi数据库版+方法版

    在“数据库版”中,可能包含如何配置和使用数据库存储用户信息、密码哈希和加密的方法,以确保用户凭证的安全存储。 3. **授权(Authorization)**: Acegi Security提供了基于角色的访问控制(RBAC),可以对URL...

    学习Acegi-认证 文档

    ### Acegi认证服务详解 #### 一、Acegi简介与背景 Acegi是Spring Security的前身,是一款基于Spring框架的安全管理工具,旨在为应用程序提供安全控制...希望本文能够为正在学习或使用Acegi的同学提供有价值的参考。

    springside 玩转acegi

    最后,如果你希望了解更多关于Acegi Security的细节,可以参考博文链接提供的内容,那里可能有更深入的解析和实例分析。同时,随着Spring Security的出现,虽然Acegi Security已不再更新,但其思想和机制对于理解...

Global site tag (gtag.js) - Google Analytics