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

 更新时间:2017年03月10日 15:17:12   作者:xinkou9725  
这篇文章主要介绍了Java中SpringSecurity密码错误5次锁定用户的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

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次锁定用户的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • java中的BlockingQueue(阻塞队列)解析

    java中的BlockingQueue(阻塞队列)解析

    这篇文章主要介绍了java中的BlockingQueue阻塞队列解析,阻塞队列是一个支持两个附加操作的队列,这两个附加的操作是,在队列为空时,获取元素的线程会等待队列变为非空,需要的朋友可以参考下
    2023-12-12
  • Java 17 更新后的 strictfp 关键字

    Java 17 更新后的 strictfp 关键字

    strictfp 可能是最没有存在感的关键字了,很多人写了多年 Java 甚至都不知道它的存在,strictfp,字面意思就是严格的浮点型。这玩意儿居然还有个关键字,可见其地位还是很高的。下面文章小编就带大家详细介绍其关键字,需要的朋友可以参考一下
    2021-09-09
  • Spring依赖注入底层原理详解

    Spring依赖注入底层原理详解

    这篇文章主要介绍了Spring依赖注入底层原理详解,  依赖注入是一种设计模式,它将对象之间的依赖关系从代码中移除,并由容器来管理这些依赖关系,依赖注入的主要目的是降低代码的耦合度,使代码更加灵活和可维护,需要的朋友可以参考下
    2023-09-09
  • lombok 找不到get/set方法的原因及分析

    lombok 找不到get/set方法的原因及分析

    这篇文章主要介绍了lombok 找不到get/set方法的原因及分析,具有很好的参考价值,希望对大家有所帮助。
    2022-06-06
  • javaweb servlet中使用请求转发乱码的实现

    javaweb servlet中使用请求转发乱码的实现

    下面小编就为大家带来一篇javaweb servlet中使用请求转发乱码的实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • Java日常练习题,每天进步一点点(26)

    Java日常练习题,每天进步一点点(26)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • java使用CompletableFuture分批处理任务实现

    java使用CompletableFuture分批处理任务实现

    本文主要介绍了java使用CompletableFuture分批处理任务实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • POI导出之Excel实现单元格的背景色填充问题

    POI导出之Excel实现单元格的背景色填充问题

    这篇文章主要介绍了POI导出之Excel实现单元格的背景色填充问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • java实现多线程之定时器任务

    java实现多线程之定时器任务

    本篇文章主要介绍了java实现多线程之定时器任务,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • IDEA 2020.1 for Mac 下载安装配置及出现的问题小结

    IDEA 2020.1 for Mac 下载安装配置及出现的问题小结

    这篇文章主要介绍了IDEA 2020.1 for Mac 下载安装配置及出现的问题小结,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03

最新评论