热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

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

这篇文章主要介绍了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 { 
  @Autowired 
  private UserDao userDao; 
  @Override 
  public void onApplicationEvent(AuthenticationSuccessEvent authenticationSuccessEvent) { 
    YftUserDetails yftUserDetails = (YftUserDetails) authenticationSuccessEvent.getAuthentication().getPrincipal(); 
    String account = yftUserDetails.getUsername(); 
    Map 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 { 
  @Autowired 
  private UserDao userDao; 
  @Autowired 
  private ParamsDao paramsDao; 
  @Override 
  public void onApplicationEvent(AuthenticationFailureBadCredentialsEvent authenticationFailureBadCredentialsEvent) { 
    String account = authenticationFailureBadCredentialsEvent.getAuthentication().getPrincipal().toString(); 
    Map 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); 
} 

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

alter table T_YFT_USER add (FAILS number(11) default 0 ); 
comment on column T_YFT_USER.FAILS is '失败尝试次数'; 
[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次锁定用户的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


推荐阅读
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 探讨密码安全的重要性
    近期,多家知名网站如CSDN、人人网、多玩、开心网等的数据库相继被泄露,其中大量用户的账户密码因明文存储而暴露无遗。本文将探讨黑客获取密码的常见手段,网站如何安全存储用户信息,以及用户应如何保护自己的密码。 ... [详细]
  • 本文记录了在Windows 8.1系统环境下,使用IIS 8.5和Visual Studio 2013部署Orchard 1.7.2过程中遇到的问题及解决方案,包括503服务不可用错误和web.config配置错误。 ... [详细]
  • 本文探讨了在SQL Server 2008环境下,当尝试删除拥有数据库架构的用户时遇到的问题及解决方案,包括如何查询和更改架构所有权。 ... [详细]
  • 如何在U8系统中连接服务器并获取数据
    本文介绍了如何在U8系统中通过不同的方法连接服务器并获取数据,包括使用MySQL客户端连接实例的方法,如非SSL连接和SSL连接,并提供了详细的步骤和注意事项。 ... [详细]
  • 本文介绍如何通过整合SparkSQL与Hive来构建高效的用户画像环境,提高数据处理速度和查询效率。 ... [详细]
  • 本文详细介绍了Android系统的四层架构,包括应用程序层、应用框架层、库与Android运行时层以及Linux内核层,并提供了如何关闭Android系统的步骤。 ... [详细]
  • 本文介绍如何通过参数化查询来防止SQL注入攻击,确保数据库的安全性。示例代码展示了在C#中使用参数化查询添加学生信息的方法。 ... [详细]
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 使用虚拟机配置服务器
    本文详细介绍了如何使用虚拟机配置服务器,包括购买云服务器的操作步骤、系统默认配置以及相关注意事项。通过这些步骤,您可以高效地配置和管理您的服务器。 ... [详细]
  • 本文深入解析了 Kubernetes 控制平面(特别是 API 服务器)与集群节点之间的通信机制,并对其通信路径进行了详细分类。旨在帮助用户更好地理解和定制其安装配置,从而增强网络安全性,确保集群的稳定运行。 ... [详细]
  • java类名的作用_java下Class.forName的作用是什么,为什么要使用它?
    湖上湖返回与带有给定字符串名的类或接口相关联的Class对象。调用此方法等效于:Class.forName(className,true,currentLoader) ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • 本文详细介绍了Hibernate中的立即检索与延迟检索的概念及区别,同时探讨了类级别与关联级别的检索配置方法。通过具体的配置示例,帮助开发者更好地理解和应用这些策略。 ... [详细]
author-avatar
openap卍巛i_r肀eport1
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有