Java中SpringSecurity密码错误5次锁定用户的实现方法

所属分类: 软件编程 / java 阅读数: 25
收藏 0 赞 0 分享

Spring Security简介

Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。

下面看下实例代码:

第一步:创建 AuthenticationSuccessEventListener.Java  用来处理登录成功的事件。

package com.dcits.yft.auth; 
import com.dcits.yft.system.dao.UserDao; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.ApplicationListener; 
import org.springframework.security.authentication.event.AuthenticationSuccessEvent; 
import org.springframework.stereotype.Component; 
import java.util.Map; 
/** 
 * 登陆成功监听 
 * 
 * @author Shaoj 3/2/2017. 
 */ 
@Component 
public class AuthenticationSuccessEventListener implements ApplicationListener<AuthenticationSuccessEvent> { 
  @Autowired 
  private UserDao userDao; 
  @Override 
  public void onApplicationEvent(AuthenticationSuccessEvent authenticationSuccessEvent) { 
    YftUserDetails yftUserDetails = (YftUserDetails) authenticationSuccessEvent.getAuthentication().getPrincipal(); 
    String account = yftUserDetails.getUsername(); 
    Map<String, Object> user = userDao.queryUserByAccount(account); 
    userDao.updateStatusByAccount(account, user.get("ENABLE").toString(), 0); 
  } 
}

第二步:新建AuthenticationFailureListener.java 用来处理登录失败的事件。

package com.dcits.yft.auth; 
import com.dcits.yft.system.dao.ParamsDao; 
import com.dcits.yft.system.dao.UserDao; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.ApplicationListener; 
import org.springframework.security.authentication.event.AuthenticationFailureBadCredentialsEvent; 
import org.springframework.stereotype.Component; 
import java.util.Map; 
/** 
 * 登陆失败监听 
 * 
 * @author Shaoj 3/2/2017. 
 */ 
@Component 
public class AuthenticationFailureListener implements ApplicationListener<AuthenticationFailureBadCredentialsEvent> { 
  @Autowired 
  private UserDao userDao; 
  @Autowired 
  private ParamsDao paramsDao; 
  @Override 
  public void onApplicationEvent(AuthenticationFailureBadCredentialsEvent authenticationFailureBadCredentialsEvent) { 
    String account = authenticationFailureBadCredentialsEvent.getAuthentication().getPrincipal().toString(); 
    Map<String, Object> user = userDao.queryUserByAccount(account); 
    if (user != null) { 
      // 用户失败次数 
      int fails = Integer.parseInt(user.get("FAILS").toString()); 
      fails++; 
      // 系统配置失败次数 
      int FAILS_COUNT = Integer.parseInt(paramsDao.queryParamsValue("FAILS_COUNT")); 
      // 超出失败次数,停用账户 
      if (fails >= FAILS_COUNT) { 
        userDao.updateStatusByAccount(account, "false", fails); 
        // 失败次数++ 
      } else { 
        userDao.updateStatusByAccount(account, user.get("ENABLE").toString(), fails); 
      } 
    } 
  } 
} 

第三步:在UserDao.java中加入登录状态更新的代码

/** 
 * 更新用户登录次数 
 * 
 * @param account 账户 
 * @param login_counts 登录次数 
 * @return 
 */ 
public void updateLoginCounts(String account) { 
  daoUtil.update("update t_yft_user set login_counts = login_counts + 1 where account = ?", account); 
} 

第四步:数据库中添加登录次数字段

<span style="font-family: Arial, Helvetica, sans-serif;">alter table T_YFT_USER add (FAILS number(11) default 0 );</span> 
<span style="font-family: Arial, Helvetica, sans-serif;">comment on column T_YFT_USER.FAILS is '失败尝试次数';</span> 
[sql] view plain copy
INSERT INTO t_yft_params (ID,CODE,NAME,VALUE,UNIT,REMARK,CRT_DATE) 
 VALUES (66,'FAILS_COUNT','登陆尝试次数','5','','',to_date('2017-03-02','yyyy-mm-dd')); 

以上所述是小编给大家介绍的Java中SpringSecurity密码错误5次锁定用户的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

更多精彩内容其他人还在看

Collections工具类_动力节点Java学院整理

Collections工具类提供了大量针对Collection/Map的操作。这篇文章主要介绍了Collections工具类_动力节点Java学院整理,需要的朋友可以参考下
收藏 0 赞 0 分享

SpringMVC集成Swagger实例代码

本篇文章主要介绍了SpringMVC集成Swagger实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

十大常见Java String问题_动力节点Java学院整理

本文介绍Java中关于String最常见的10个问题,需要的朋友参考下吧
收藏 0 赞 0 分享

Java微信公众平台开发(13) 微信JSSDK中Config配置

这篇文章主要为大家详细介绍了Java微信公众平台开发第十三步,微信JSSDK中Config配置,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java实现一个达达租车系统的步骤详解

这篇文章主要给大家介绍了利用Java实现一个达达租车系统的步骤,文中给出了详细的实现思路和示例代码,并在文末给出了完整的源码供大家学习下载,需要的朋友可以参考借鉴,下面来一起看看吧。
收藏 0 赞 0 分享

Java微信公众平台开发(14) 微信web开发者工具使用

这篇文章主要为大家详细介绍了Java微信公众平台开发第十四步,微信web开发者工具的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Spring Boot整合RabbitMQ实例(Topic模式)

Topic Exchange 转发消息主要是根据通配符。接下来通过本文给大家分享Spring Boot整合RabbitMQ实例(Topic模式),需要的朋友参考下吧
收藏 0 赞 0 分享

Java微信公众平台开发(15) 微信JSSDK的使用

这篇文章主要为大家详细介绍了Java微信公众平台开发第十五步,微信JSSDK的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

java多线程的同步方法实例代码

这篇文章主要介绍了 java多线程的同步方法实例代码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

spring boot整合RabbitMQ实例详解(Fanout模式)

这篇文章主要介绍了spring boot整合RabbitMQ的实例讲解(Fanout模式),非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多