`

用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" />

相关推荐

    jasypt API Docs 1.9 (CHM格式)

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

    jasypt-1.9.3.jar

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

    jasypt-1.9.3-dist.zip

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

    jasypt-1.7 简单的java字符串加密工具

    简单好用的String加密工具。 为开发人员提供一种简单的方式来为项目增加加密功能,包括:密码Digest认证,文本和对象加密,集成hibernate,Spring Security(Acegi)来增强密码管理。

    jasypt1.9.2&jce1.6-1.8

    Jasypt这个Java类包为开发人员提供一种简单的方式来为项目增加加密功能,包括:密码Digest认证,文本和对象加密,集成hibernate,Spring Security(Acegi)来增强密码管理。 更多资源详见: ...

    Hibernate+Struts+Spring

    与其他框架相比,它提供了各种Web系统开发过程中都需要开发的一些功能,如登陆、用户密码加密,用户管理、根据不同的用户可以展现不同的菜单,同时还带有代码生成器,自动生成40%-60%左右的代码,自带了默认的一些...

    SpringSecurity使用和分析.docx

    Spring Security目前已经升级到5.1.3.RELEASE版本,加入了原生OAuth2.0框架,支持更加现代化的密码加密方式。可以预见,在Java应用安全领域,Spring Security会成为被首先推崇的解决方案,就像我们看到服务器就会...

    JAVA上百实例源码以及开源项目

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    JAVA上百实例源码以及开源项目源代码

    Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四”...

    Grails 技术精解与Web开发实践【源码+样章】----下载不扣分,回帖加1分,欢迎下载,童叟无欺

    Grails 技术精解与Web开发实践【源码+样章】----下载不扣分,回帖加1分,欢迎...20.5 加密配置文件中的数据库密码 246 20.6 本章小结 246 参考文献 247 索引 248 Grails技术精解与Web开发实践 目录 XII XI

    java开源包8

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包1

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包11

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包2

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包3

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包6

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包5

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包10

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包4

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

Global site tag (gtag.js) - Google Analytics