`
Aspen
  • 浏览: 8623 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Acegi 扩展验证码认证[原创]

阅读更多

很多网站的用户登录,从安全上考虑.不仅需要输入用户名和密码,而且也需要输入"验证码",何为验证码这里不着解释,网上也有很多说明.下面给出在Acegi框架下的实现验证码功能的主要代码.

一.新建AuthenticationProcessingFilter 类

java 代码
  1. import net.sf.acegisecurity.Authentication;       
  2. import net.sf.acegisecurity.AuthenticationException;       
  3. import net.sf.acegisecurity.ui.webapp.AuthenticationProcessingFilter;       
  4. import javax.servlet.http.HttpServletRequest;       
  5. import ... ...       
  6.       
  7. public class ValidationCodeFilter extends AuthenticationProcessingFilter {       
  8.     public Authentication attemptAuthentication(HttpServletRequest httpServletRequest) throws AuthenticationException{       
  9.         String inputValidationCode = httpServletRequest.getParameter( "j_validation_code" );       
  10.         //从Session中取出验证码       
  11.         String ssnValidationCode = (String)httpServletRequest.getSession().getAttribute( VALIDATION_CODE );       
  12.       
  13.         if( ssnValidationCode != null && !ssnValidationCode.equals( inputValidationCode ) ){       
  14.             //用户输入的值与看到的不一致,抛出异常       
  15.             throw new ValidationCodeException( "验证码输入错误!");       
  16.         }       
  17.       
  18.         return super.attemptAuthentication( httpServletRequest ) ;       
  19.     }       
  20. }       

二.新建异常类ValidationCodeException

java 代码
  1. import net.sf.acegisecurity.AuthenticationException;   
  2.   
  3. /**  
  4.  * 验证码异常  
  5.  */  
  6. public class ValidationCodeException extends AuthenticationException {   
  7.     public ValidationCodeException(String s) {   
  8.         super(s);   
  9.     }   
  10. }   

三.修改Acegi配置文件

  1. <bean id="authenticationProcessingFilter" class="xxx.xxx.ValidationCodeFilter">  
  2.     <property name="authenticationManager"><ref local="authenticationManager"/>property>  
  3.     <property name="authenticationFailureUrl"><value>/loginFailure.htmlvalue>property>  
  4.     <property name="defaultTargetUrl"><value>/welcome.htmlvalue>property>  
  5.     <property name="filterProcessesUrl"><value>/j_security_checkvalue>property>  
  6. bean>  
xml 代码

    

   
分享到:
评论
3 楼 sunjiesh 2009-09-03  
lz上面显示的主要是验证码验证吧,那么
String ssnValidationCode = (String)httpServletRequest.getSession().getAttribute( VALIDATION_CODE );  这句话中的VALIDATION_CODE的值是怎么放入session中,也可以说是怎么客户端是怎么生成验证码的。使用js或其他方式?
2 楼 bingdian20045 2008-12-28  
Acegi是默认是通过AuthenticationProcessingFilter来取得登录用户名和密码并封装成UsernamePasswordAuthenticationToken往后传递。userParameter和passwordParameter对应request.getParameter(key)中的key,默认就是j_username和j_password,可通过对应的Setter方法进行配置。如
	<bean id="authenticationProcessingFilter"

class="org.springframework.security.ui.webapp.AuthenticationProcessingFilter">
<property name="authenticationManager"
ref="authenticationManager" />
<property name="authenticationFailureUrl"
value="/login.jsp?login_error=1" />
<property name="defaultTargetUrl" value="/admin/index.jsp" />
<property name="filterProcessesUrl"
value="/j_acegi_security_check" />
<property name="rememberMeServices" ref="rememberMeServices" />
<property name="userParameter" value="formname:j_username"/>
</bean>
1 楼 wswz 2008-06-17  
如果用jsf的输入控件,id前面会冠以form的名字。
如我的用户名输入控件的id是"j_username",其所在的form的id是"formname"
提交给服务器时j_username会变成  "formname:j_username",
所以acegi框架读不到用户名

请问怎么样才能定制j_username和j_password的名称呢?

谢谢!!

相关推荐

    acegi basic认证具体demo

    在`YourUserDetailsService`中,你需要实现`UserDetailsService`接口,提供一个方法`loadUserByUsername(String username)`,该方法会由Acegi在认证过程中调用,用于查找指定用户名的用户信息。 最后,为了使Basic...

    acegi验证码

    详细描述了acegi的验证码功能如何使用

    Acegi框架介绍 acegi安全与认证

    Acegi Security框架的强大之处在于它的灵活性和扩展性。开发者可以在不改变业务逻辑的情况下,通过配置实现复杂的权限管理。尽管现在Spring Security已经成为更推荐的安全解决方案,但Acegi在早期对Spring应用的安全...

    基于spring的Acegi安全框架认证与授权的分析及扩展.pdf

    ### 基于Spring的Acegi安全框架认证与授权的分析及扩展 #### 1. Acegi安全框架的概述 Acegi(后更名为Spring Security)是Spring框架中的一个子项目,专注于提供强大的安全功能,包括认证、授权以及保护web应用...

    Acegi身份认证框架的使用笔记

    一个使用Acegi身份认证框架的笔记 可以节省你的时间 方便快速学会使用

    acegi

    - **身份验证(Authentication)**:Acegi 提供了多种身份验证机制,如基于密码的认证、LDAP认证等,确保只有合法用户能够访问系统资源。 - **授权(Authorization)**:Acegi 提供细粒度的权限控制,允许开发者...

    学习Acegi-认证 文档

    ### Acegi认证服务详解 #### 一、Acegi简介与背景 Acegi是Spring Security的前身,是一款基于Spring框架的安全管理工具,旨在为应用程序提供安全控制功能,包括身份验证(Authentication)和授权(Authorization)...

    ACEGI

    Acegi Security的优势在于其灵活性和可扩展性,它不仅能够与Spring框架无缝集成,还能够适应各种各样的认证需求,无论是标准的协议还是特定的商业解决方案。此外,Acegi Security提供的特性如“记住我”功能和“Run-...

    acegi form 认证 demo

    acegi security实践教程—简单定制logoutFilter 这个demo是在原来的基础上,定制自己的logoutFilter,具体详细的博客地址介绍如下: http://blog.csdn.net/yuebinghaoyuan/article/details/21075929

    acegi 例子 进行了扩展

    标题中的“acegi 例子进行了扩展”意味着这个示例不仅包含了Acegi Security的基本功能,还可能包含了一些额外的定制或增强,比如自定义认证策略、更复杂的授权规则或者与其他系统的集成。这样的扩展有助于开发者深入...

    Acegi安全框架简介及实用扩展

    Acegi安全框架简介及实用扩展,spring acegi 权限管理

    基于java的ACEGI

    4. **实现认证和授权逻辑**:根据应用需求,实现自定义的认证和授权类,这些类通常会扩展Acegi提供的基础类。 5. **测试和调试**:在实际运行环境中测试安全功能,确保用户权限设置正确,并使用Acegi提供的日志和...

    spring acegi 详细文档

    Acegi还提供了丰富的接口和类,允许开发者自定义认证和授权流程,例如创建自定义的`UserDetailsService`来从数据源加载用户信息,或者实现自定义的`AuthenticationProvider`以支持特定的认证逻辑。 尽管Spring ...

    实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架

    Acegi是一个专门为SpringFramework应用提供安全机制的开放源代码项目,全称为Acegi Security System for ...通过这个例子详细介绍如何配置Acegi的各个组件,同时介绍如何扩展Acegi 使其能够从数据库中读取配置信息。

    acegi认证,授权

    学习acegi的第一步, &lt;bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy"&gt; PATTERN_TYPE_APACHE_ANT /**=httpSessionContextIntegrationFilter,basicProcessingFilter,...

    acegi 入门培训教程

    Acegi提供了灵活的认证模型,允许开发者根据需求选择不同的认证策略。例如,可以通过HTTP基本认证、LDAP集成、CAS单点登录服务或者自定义的认证机制来验证用户身份。 5. **Acegi Security的授权简述** 在授权方面...

    acegi form认证具体demo

    这是基于acegi框架实现的form认证的具体demo,详细的教程可以参考博客地址:http://blog.csdn.net/yuebinghaoyuan/article/details/20001111

    权限Acegi的使用

    开发者可以通过自定义认证提供者来扩展这些机制。 2. **授权**:授权决定了哪些用户或角色可以访问特定的资源或执行特定的操作。Acegi允许通过定义安全表达式、访问决策管理器和访问决策投票器来进行细粒度的授权...

    Acegi使用.pdf

    - **AOP实现**:通过面向切面编程技术,Acegi能够与业务逻辑分离,提高系统的可维护性和扩展性。 - **高度灵活性**:支持多种认证方式,且强大的ACL权限控制能力,适用于复杂的权限管理体系。 - **兼容性**:既适用...

Global site tag (gtag.js) - Google Analytics