1:需求:客户使用用户名、密码登录,根据不同的错误类型,在页面提示相应的错误信息
(一) 同一帐号IP或者密码450内3次登录,提示:请450秒后再进行登录
(二) 450内登录失败大于等于3次登录,提示:帐号被设为冻结
(三) 450秒内密码连续3次错误,提示:帐号禁止15分钟内再登录
.............
2:采用技术:acegi-security-1.0.7.jar
3:问题描述:
(一) 如何将acegi登录认证的错误信息,输出给用户。
4:参考的资料:http://jiwenke.iteye.com/blog/112979
5:解决方案:采用Acegi提供的异常来处理。
6:核心步骤:
(一)新建一个自己的类如(XXAuthenticationProcessingFilter)继承acegi的类org.acegisecurity.ui.webapp.AuthenticationProcessingFilter,同时覆盖父类的3个方法,
关键是覆盖父类的protected void unsuccessfulAuthentication(HttpServletRequest request,HttpServletResponse response, AuthenticationException failed)方法
。。。。。。。。。
String validMessage = failed.getMessage(); //provider处理中抛出的异常,供web页面处理提示信息
logger.info("登录验证出现异常,原因: " + validMessage);
SecurityContextHolder.getContext().setAuthentication(null);
String failureUrl = getExceptionMappings().getProperty(failed.getClass().getName(), getAuthenticationFailureUrl());
failureUrl += "&validMessage=" + validMessage; // 已参数的形式传递给前端页面 如:xxxx/login.jsp?login_error=1&validMessage=3
。。。。。。。。
补充:XXAuthenticationProcessingFilter类的具体实现参考附件
(二) 修改acegi的配置文件 applicationContext-acegi-security.xml,将authenticationProcessingFilter修改为自己的处理类
<bean id="authenticationProcessingFilter" class="xxx.xxx.xxx.filter.XXAuthenticationProcessingFilter"><property name="authenticationManager">
<ref bean="authenticationManager"></ref>
</property><property name="authenticationFailureUrl"><value>/login.jsp?login_error=1</value></property>
//验证出错跳转的路径己参数
<property name="defaultTargetUrl"><value>/</value></property>
<property name="filterProcessesUrl"><value>/j_acegi_security_check</value></property>
<property name="rememberMeServices"><ref local="rememberMeServices"></ref>
</property><property name="alwaysUseDefaultTargetUrl"><value>false</value></property>
</bean>
(三) authenticationManager中的provider的配置
<bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">
<property name="providers"><list><ref local="memberCardDaoAuthenticationProvider"></ref>
//该provider从数据库中查询用户名、密码进行验证
<ref local="rememberMeAuthenticationProvider"></ref>
<ref local="anonymousAuthenticationProvider"></ref></list>
</property>
</bean>
(四)memberCardDaoAuthenticationProvider的p配置
<bean id="memberCardDaoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
<property name="userDetailsService"><ref local="memberCardJdbcImpl"></ref></property>
<property name="userCache"><ref local="userCache"></ref></property>
<property name="passwordEncoder"><ref local="cardPasswordEncoder"></ref></property>
</bean>
(五) memberCardJdbcImpl的配置
<bean id="memberCardJdbcImpl" class="com.milesup.acegi.userdetails.jdbc.MemberCardJdbcImpl">
<property name="dataSource"><ref bean="dataSource"></ref></property>
<property name="loginLogService"><ref bean="loginLogService"></ref></property>
/MemberCardJdbcImpl具体处理验证的类需要注入的service
<property name="rolePrefix"><value>ROLE_</value></property>
</bean>
补充:MemberCardJdbcImpl继承了org.acegisecurity.userdetails.jdbc.JdbcDaoImpl类,同时覆盖该类的
public UserDetails loadUserByUsername(String userInfo) throws ValidateException 在该方法中真正实现数据库用户名、密码进行验证
注意:该方法抛出来一个自定义的异常类,该类继承了org.acegisecurity.AuthenticationException,用于抛出异常XXAuthenticationProcessingFilter类中方法unsuccessfulAuthentication
要处理的异常,详细参考附件XXAuthenticationProcessingFilter类的详细信息。
7: 页面处理
$(document).ready(function(){
if (${param.login_error == 1}) {
if (${param.validMessage == 2}){
$('#error_id').html('登录失败:同一帐IP或者密码450内3次登录,请8分钟后再进行登录');
} else if (${param.validMessage == 3}){
$('#error_id').html('登录失败:450内登录失败大于等于3次登录,帐号被设为冻结');
} else if (${param.validMessage == 4}){
$('#error_id').html('登录失败:450秒内密码连续3次错误,15分钟内禁止登录');
} else if (${param.validMessage == 5}){
$('#error_id').html('登录失败:15分钟内禁止登录');
} else if (${param.validMessage == 6}){
$('#error_id').html('登录失败:用户名、密码、号码类型不正确');
}
}
});
总结:以上是这两天工作中接触acegi处理的问题,主要提供给自己一个回忆的纪要,如果写得不好误导了来访的朋友或者耽误了您的时间,敬请谅解。
排版太难看了,有时间再来整过。。。。。。
分享到:
相关推荐
例如,你可以开启`DebugFilter`,它会在页面底部显示有用的调试信息。 7. **子文件`AcegiDemo14`**:这个文件很可能是项目的一个组成部分,可能包含示例的代码结构,如控制器、服务、DAO以及Acegi的配置文件。通过...
6. **异常处理**:当访问控制失败时,Acegi Security会抛出相应的异常,你可以自定义异常处理器来处理这些异常,如重定向到错误页面或显示定制的错误信息。 7. **与Spring集成**:作为Spring的扩展,Acegi Security...
6. **异常处理**:当安全规则不满足时,Acegi会抛出异常,开发者可以自定义这些异常的处理逻辑,如重定向到错误页面或显示错误消息。 压缩包内的"www.pudn.com.txt"可能是一个包含链接或其他信息的文本文件,指向更...
5. **异常处理(Exception Handling)**:当安全规则不被满足时,Acegi Security会抛出相应的异常,这些异常可以被捕获并进行自定义处理,如重定向到登录页面或显示错误信息。 6. **与Spring的集成**:Acegi ...
在实际项目中,为了提高用户体验,我们还需要考虑如何处理权限不足的情况,比如显示友好的错误信息,或者重定向到登录页面。同时,对于多租户环境,可能还需要实现动态的角色和权限分配,使得管理员可以根据用户或...
5. **异常处理**:能够统一处理安全相关的异常,如未认证、未授权等,提供定制化的错误提示。 6. **自定义扩展**:开发者可以根据需求自定义认证和授权策略,增强了框架的灵活性。 7. **兼容性**:"tiger"指的是...
- **视图渲染**:登录验证的错误信息会展示在JSP页面上,通常通过EL(Expression Language)和JSTL标签库来显示。 - **用户交互**:JSP页面负责与用户交互,提供登录表单,显示操作结果,以及CRUD操作后的反馈信息...
6. **国际化支持**:Acegi Security 1.0.7版本也支持多语言环境,允许错误消息和提示信息根据用户的语言设置进行本地化。 7. **API与配置**:Acegi Security提供了一套全面的API和XML配置,使得开发者可以精细控制...
Acegi还支持会话管理,它会在服务器端存储用户的身份验证信息,并在客户端设置安全cookie,以便在后续请求中自动进行身份验证,无需用户反复登录。同时,当用户退出系统时,Acegi会清除相关的服务器端会话对象,确保...
你可以自定义异常处理器来决定如何处理这些异常,例如重定向到错误页面或显示友好的错误消息。 8. **状态管理**:Acegi支持基于session和无状态的会话管理。基于session的管理方式将用户的认证信息存储在服务器的...
6. **异常处理**:当安全检查失败时,Acegi会抛出相应的安全异常,开发者可以自定义这些异常的处理方式,如重定向到错误页面或显示定制的错误信息。 7. **记住我(Remember Me)服务**:Acegi提供了“记住我”功能...
你可以自定义处理逻辑,比如显示错误页面或重定向到登录页面。 在SpringSide项目中,`applicationContext-acegi-security.xml`的配置是项目安全架构的基础,通过精细配置,我们可以实现对用户身份的验证、权限的...
你可以定义自定义的异常处理机制,以友好地显示错误信息或重定向至登录页面。 8. **测试与调试**:在实际应用中,要对不同的角色和权限进行充分的测试,确保安全策略按预期工作。 总的来说,"acegi保护业务方法_...
用户提交的身份验证信息会经过认证Provider处理,一旦认证成功,Acegi会在SecurityContextHolder中设置一个SecurityContext对象,存储用户信息。 3. **授权机制**: 授权涉及决定用户是否有权访问特定资源。Acegi...
4. **异常处理**:当安全检查失败时,Acegi Security可以自定义异常处理逻辑,提供友好的错误提示。 5. **登录和注销界面**:Acegi Security提供了默认的登录和注销界面,同时允许开发者根据项目需求进行定制。 6....
在`attemptAuthentication`方法中,如果认证失败,将会调用`unsuccessfulAuthentication`方法,该方法可能包含向用户显示错误消息或者重定向到登录页面的操作。相反,如果认证成功,`AuthenticationProcessingFilter...
如果用户未经过认证或无权访问资源,Acegi2会触发相应的处理,如重定向到登录页面或返回错误信息。 4. **Access Decision Manager (ADM)**:负责做出是否允许访问的决策。它可以配置为使用多数投票、优先级排序等...
你可以定制这些异常的处理逻辑,如重定向到错误页面或显示自定义错误消息。 8. **测试与调试**:Acegi 提供了 `TestSecurityContextHolderStrategy` 用于单元测试,以及 `debug` 属性来开启详细的日志输出,帮助...
6. **国际化支持**: 提供多语言的安全提示和错误消息。 **使用流程** 1. **配置安全上下文**: 配置安全管理器,包括认证提供者和访问决策策略。 2. **定义安全拦截规则**: 在Web应用中,使用`<http>`元素配置过滤...
4. 安全异常处理:当用户试图访问无权访问的资源时,插件会抛出异常,你可以自定义异常处理器,提供友好的错误提示。 5. 安全审计:插件还提供了安全事件日志功能,可以记录用户的登录、注销、权限变更等操作,便于...