srping security3.0(一)----登陆不能抛出自己定义的异常,用户不存在异常,用户尝试登陆次数过多,回到登陆之前访问的页面

          spring security3.0默认的表单登陆并不会抛出UsernameNotFoundException异常,我尝试了多次, 自定配置了bean, 也把错误信息扔到了session属性都没有解决

public final class WebAttributes {
    public static final String AUTHENTICATION_EXCEPTION = "SPRING_SECURITY_LAST_EXCEPTION";

 

得到的老是令人讨厌的Bad credentials(当然可以通过message.property可以做国际化, spring security3提供的, 我们写个中文的属性文件就可以了。

 

之所以我想在登陆验证时抛异常是出于两个目的:

1  提示用户不存在

2  提示用户输入密码错误最大次数不能超过3, 超过3则锁定账号,   让管理员自己去解锁。

(注意:账号可用,过期,是否锁定, 这些是spring security3自带的异常, 没必要我们再去扔出了, 上面列的2个是我自定义的异常。

 

补充一点,默认的登录表单异常处理是在类SimpleUrlAuthenticationFailureHandler里处理的。

有个不一样的地方是, spring security并不是直接抛出异常, 而是包装了放在session里,属性名就是

WebAttributes.AUTHENTICATION_EXCEPTION

 

我自定义了异常处理, 不用SimpleUrlAuthenticationFailureHandler

 session.getAttribute(TRY_MAX_COUNT);  这里记得登陆成功了之后要清掉

具体办法是:在这里清掉

public class AccessSavedRequestAwareAuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler {

 

对应的配置文件

 

这个是支持登陆成功之后, 进入没有登陆之前访问的地址。

 

 

下面是登陆多次失败的配置:

 

 

 

在源码里可以看到DaoAuthenticationProvide

r的父类AbstractUserDetailsAuthenticationProvider有一个属性hideUserNotFoundExceptions

在配置中即可看出 hideUserNotFoundExceptions   = true代表隐藏真实的异常, 改为false即可显示你自己的异常了。

不过要继承AuthenticationException这个异常哦。

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值