在Java项目中使用SpringSecurity实现输入密码错误过多锁定用户的功能
这篇文章将为大家详细讲解有关在Java项目中使用SpringSecurity实现输入密码错误过多锁定用户的功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
公司主营业务:网站设计、网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出洛宁免费做网站回馈大家。
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实现输入密码错误过多锁定用户的功能就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
网站名称:在Java项目中使用SpringSecurity实现输入密码错误过多锁定用户的功能
转载源于:http://scyanting.com/article/pddeji.html