当前位置: 首页 > news >正文

怎么在网站挂黑链接怎么发布网站

怎么在网站挂黑链接,怎么发布网站,徐州专业做网站的,电子商务大专出来都去干嘛了作者#xff1a;后端小肥肠 #x1f347; 我写过的文章中的相关代码放到了gitee#xff0c;地址#xff1a;xfc-fdw-cloud: 公共解决方案 #x1f34a; 有疑问可私信或评论区联系我。 #x1f951; 创作不易未经允许严禁转载。 姊妹篇#xff1a; 【Spring Security系列…   作者后端小肥肠 我写过的文章中的相关代码放到了gitee地址xfc-fdw-cloud: 公共解决方案 有疑问可私信或评论区联系我。  创作不易未经允许严禁转载。 姊妹篇 【Spring Security系列】10分钟实现 SpringSecurity CAS 完美单点登录方案_spring-security-cas-CSDN博客 【Spring Security系列】如何用Spring Security集成手机验证码登录五分钟搞定_springsecurity短信验证码登录-CSDN博客 【Spring Security系列】基于Spring Security实现权限动态分配之菜单-角色分配及动态鉴权实践_spring secrity权限角色动态管理-CSDN博客 【Spring Security系列】基于Spring Security实现权限动态分配之用户-角色分配_spring security 角色-CSDN博客 【Spring Security系列】权限之旅SpringSecurity小程序登录深度探索_spring security 微信小程序登录-CSDN博客 【Spring Security系列】Spring SecurityJWTRedis实现用户认证登录及登出_spring security jwt 退出登录-CSDN博客 目录 1. 前言  2. 技术流程详解 2.1.  技术流程讲解 2.2. 涉及到的SpringSecurity核心组件 3. 技术实现 3.1. 表结构设计 3.2. 核心代码 4. 结语 1. 前言  在现代互联网应用中账号安全是重中之重。然而暴力破解攻击依然是最常见的安全威胁之一。攻击者通过自动化脚本尝试大量的用户名和密码组合试图找到漏洞进入系统。尽管我们可以通过复杂密码要求、验证码、双因子认证等方式来提高安全性但这些方法无法完全杜绝暴力破解的风险。 为了解决这一问题账号锁定机制被广泛应用。通过限制用户的密码输入错误次数当达到一定次数时锁定账号可以有效防范暴力破解攻击提高系统安全性。 以下是引入账号锁定机制的几大原因 防止暴力破解攻击攻击者短时间内多次尝试密码时锁定机制能阻断其进一步操作。保护用户资产和隐私避免账号被盗造成的财产损失和隐私泄露。提升系统安全性通过限制无效登录尝试次数降低因密码弱点引发的安全隐患。应对安全合规要求许多行业标准如 GDPR、ISO27001建议对异常登录行为采取保护措施。 在本文中我们将通过 Spring Security 来实现一个简单而高效的账号锁定机制。当用户密码连续输入错误达到 5 次后系统将自动锁定该账号3分钟。接下来我们将通过技术流程、表结构设计、核心代码实现以及效果测试详细讲解如何在 Spring Security 中落地这一功能。 2. 技术流程详解 2.1.  技术流程讲解 基于SpringSecurity实现密码错误锁定账号的流程如下 其实光看流程图已经能很清晰地理解完整流程我这边还是用文字再给大家梳理一遍 1. 用户提交登录请求 用户输入用户名和密码后发起登录请求系统开始验证其身份。 2. 加载用户信息 Spring Security 使用自定义的 UserService 加载用户信息包括用户名、密码、锁定状态accountNonLocked、登录失败次数loginAttempts、锁定时间lockTime等。 3. 检查账号锁定状态 如果账号被锁定 判断锁定时间是否已过 锁定时间未过抛出 LockedException阻止登录。锁定时间已过解锁账号accountNonLocked true、重置登录失败次数loginAttempts 0并允许继续登录。如果账号未锁定直接进入密码验证。 4. 验证密码 密码正确 登录成功重置用户状态失败次数清零锁定状态解除并更新到数据库。密码错误 增加登录失败次数loginAttempts 1。如果失败次数达到 5 次或以上锁定账号accountNonLocked false并记录当前锁定时间lockTime 当前时间。 5. 更新用户状态 登录成功时更新用户信息到数据库并执行登录成功后的业务逻辑。登录失败时更新用户的失败次数和锁定状态到数据库并执行失败后的处理逻辑。 6. 等待下次登录尝试 用户根据账号状态和锁定时间决定何时再次发起登录请求。 2.2. 涉及到的SpringSecurity核心组件 以上流程涉及到的SpringSecurity核心组件如下 1. AuthenticationManager 管理认证流程调用 AuthenticationProvider 验证用户凭据。 2. AuthenticationProvider 执行具体的认证逻辑包括密码验证和账号状态检查。 3. PasswordEncoder 用于密码加密和验证例如使用 BCryptPasswordEncoder。 4. AuthenticationSuccessHandler 处理登录成功后的逻辑例如重置失败登录次数和解锁账号。 5. AuthenticationFailureHandler 处理登录失败后的逻辑例如增加登录失败次数和锁定账号。 6. AuthenticationEntryPoint 处理未认证用户访问受保护资源时的逻辑返回错误信息。 7. SecurityContextHolder 存储和提供当前用户的认证信息Authentication 对象。 8. ExceptionTranslationFilter 捕获认证过程中抛出的异常并交给 AuthenticationEntryPoint 或 AuthenticationFailureHandler 处理。 9. UsernamePasswordAuthenticationFilter 处理基于用户名和密码的登录请求触发认证流程。 10.HttpSecurity 配置认证流程和组件包括认证、授权和异常处理。 这些组件共同协作实现 Spring Security 的认证和密码错误锁定账号功能。 3. 技术实现 3.1. 表结构设计 密码错误账号锁定只涉及到user表这是我的表结构你可以根据你自己的灵活调整 CREATE TABLE user (id BIGINT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50) UNIQUE NOT NULL,password VARCHAR(255) NOT NULL,login_attempts INT DEFAULT 0, -- 登录失败次数lock_time TIMESTAMP NULL, -- 账号锁定时间account_non_locked BOOLEAN DEFAULT TRUE -- 账号是否锁定 );3.2. 核心代码 1. 编写自定义UsernamePasswordAuthenticationFilter public class SecurUsernamePasswordAuthenticationFilter extends UsernamePasswordAuthenticationFilter {AutowiredISysUserService userService;Overridepublic Authentication attemptAuthentication(HttpServletRequest request,HttpServletResponse response) throws AuthenticationException {if (request.getContentType().equals(MediaType.APPLICATION_JSON_UTF8_VALUE)|| request.getContentType().equals(MediaType.APPLICATION_JSON_VALUE)) {ObjectMapper mapper new ObjectMapper();UsernamePasswordAuthenticationToken authRequest null;//取authenticationBeanMapString, String authenticationBean null;//用try with resource方便自动释放资源try (InputStream is request.getInputStream()) {authenticationBean mapper.readValue(is, Map.class);} catch (IOException e) {//将异常放到自定义的异常类中throw new SecurAuthenticationException(e.getMessage());}try {if (!authenticationBean.isEmpty()) {//获得账号、密码String username authenticationBean.get(SPRING_SECURITY_FORM_USERNAME_KEY);String password authenticationBean.get(SPRING_SECURITY_FORM_PASSWORD_KEY);request.setAttribute(SPRING_SECURITY_FORM_USERNAME_KEY, username);//检测账号、密码是否存在if (userService.checkLogin(username, password)) {//将账号、密码装入UsernamePasswordAuthenticationToken中authRequest new UsernamePasswordAuthenticationToken(username, password);setDetails(request,authRequest );return this.getAuthenticationManager().authenticate(authRequest);}}} catch (Exception e) {throw new SecurAuthenticationException(e.getMessage());}return null;} else {return this.attemptAuthentication(request, response);}} }这段代码是一个自定义的 Spring Security 登录过滤器用于处理 JSON 格式的登录请求代替默认的表单登录。它通过解析请求体中的 JSON提取用户名和密码并调用用户服务检查登录信息是否正确。如果验证通过则创建并返回一个 UsernamePasswordAuthenticationToken交由认证管理器执行进一步的认证流程否则抛出自定义异常终止认证。  2. 编写userService.checkLogin方法  public boolean checkLogin(String username, String rawPassword) throws Exception {SysUser userEntity this.getUserByUserName(username);System.out.println(userEntity userEntity);if (userEntity null) {//System.out.println(checkLogin---------账号不存在请重新尝试);//设置友好提示throw new Exception(账号不存在请重新尝试);} else {// 检查账号锁定状态handleAccountLock(userEntity);//加密的密码String encodedPassword userEntity.getPassword();//和加密后的密码进行比配if (!passwordEncoder.matches(rawPassword, encodedPassword)) {//System.out.println(checkLogin---------密码不正确);//设置友好提示throw new Exception(密码不正确);} else {return true;}}} 这段代码实现了用户登录验证逻辑首先通过用户名获取用户信息如果用户不存在则抛出异常提示账号不存在。接着检查用户账号的锁定状态调用 handleAccountLock 方法如果账号未锁定则验证用户输入的原始密码是否与加密存储的密码匹配。密码匹配成功则返回 true否则抛出异常提示密码不正确。 3.  编写 handleAccountLock方法 /*** 检查并处理账号锁定逻辑*/private void handleAccountLock(SysUser user) {if (!user.getAccountNonLocked() user.getLockTime() ! null) {// 当前时间Date now new Date();// 解锁时间Date unlockTime new Date(user.getLockTime().getTime() LOCK_DURATION.toMillis());if (now.before(unlockTime)) {throw new LockedException(账号已锁定请3分钟后再试);}// 解锁账号并重置状态user.setAccountNonLocked(true);user.setLoginAttempts(0);user.setLockTime(null);this.updateById(user);}} 这段代码实现了账号锁定状态的检查与处理逻辑。如果用户账号已锁定且存在锁定时间系统会计算解锁时间。如果当前时间在解锁时间之前则抛出异常提示账号被锁定如果超过了解锁时间则解锁账号同时重置失败次数和锁定时间并更新用户信息到数据库。  4. 编写increaseFailedAttempts用于用户登录失败时调用 public void increaseFailedAttempts(SysUser user) {int attempts user.getLoginAttempts() 1;if (attempts MAX_LOGIN_ATTEMPTS) {user.setAccountNonLocked(false);user.setLockTime(new Date());}user.setLoginAttempts(attempts);this.updateById(user);} 这段代码实现了增加用户登录失败次数的逻辑。当用户登录失败时登录失败次数 (loginAttempts) 增加 1如果失败次数达到或超过最大允许次数 (MAX_LOGIN_ATTEMPTS)系统会将用户账号设置为锁定状态 (accountNonLockedfalse) 并记录锁定时间 (lockTime)。最后将更新后的用户状态保存到数据库。  5. 编写resetLoginAttempts用于用户登录成功时调用 public void resetLoginAttempts(String username) {SysUser user this.getUserByUserName(username);if(usernull){throw new UsernameNotFoundException(String.format(%s.这个用户不存在或已被禁用, username));}user.setLoginAttempts(0);user.setAccountNonLocked(true);user.setLockTime(null);this.updateById(user);} 这段代码实现了重置用户登录失败次数的逻辑。通过用户名查询用户信息如果用户不存在则抛出异常。若用户存在则将其登录失败次数 (loginAttempts) 重置为 0解锁账号 (accountNonLockedtrue)并清除锁定时间 (lockTimenull)。最后将更新后的用户信息保存到数据库。  6. 编写自定义AuthenticationSuccessHandler在用户登录成功时调用resetLoginAttempts 7. 编写自定义AuthenticationFailureHandler Component public class SecurAuthenticationFailureHandler extends JSONAuthentication implements AuthenticationFailureHandler {AutowiredSysUserServiceImpl sysUserService;Overridepublic void onAuthenticationFailure(HttpServletRequest request,HttpServletResponse response,AuthenticationException e) throws IOException, ServletException {// 从请求体中解析 JSON获取 usernameString username (String) request.getAttribute(SPRING_SECURITY_FORM_USERNAME_KEY);// 登录失败时增加失败次数if (username ! null) {SysUser user sysUserService.getUserByUserName(username);if (user ! null) {sysUserService.increaseFailedAttempts(user);}}ResponseStructure data ResponseStructure.instance(ALL_RETURN_401.getCode(),登录失败:e.getMessage());//输出this.WriteJSON(request, response, data);} } 这段代码是一个自定义的登录失败处理器 SecurAuthenticationFailureHandler在用户登录失败时被触发。它通过解析请求获取登录失败的用户名并调用服务方法 increaseFailedAttempts 增加用户的登录失败次数。同时根据异常信息生成统一的响应结构并以 JSON 格式返回错误信息给客户端提示登录失败的原因。  4. 结语 本文详细讲解了如何通过 Spring Security 实现密码错误多次后自动锁定账号的功能。从需求分析到技术流程再到核心代码实现我们完整梳理了账号锁定机制的设计与落地方法。 账号锁定机制是提升系统安全性的重要手段能够有效防范暴力破解攻击。在实际应用中还可以结合具体需求进行优化例如添加解锁通知或动态调整锁定策略等。 希望本文对您有所帮助若有疑问或建议欢迎交流
http://www.dnsts.com.cn/news/148817.html

相关文章:

  • 金融企业网站制作博客社区类网站模板下载
  • 建设网站文章哪里下载wordpress调用文章
  • 威海网站制作都有哪些linux 下启动 wordpress
  • 山东建设厅造价员网站成都零起飞网站建设
  • 在哪里可以学习做网站建站收入
  • 网站 利润网站模版化配置
  • 建网站费用记账深圳软件定制公司
  • 站长之家源码下载不想使用wordpress
  • 章贡区网站建设wordpress建设中插件
  • 济南商城网站建设多少钱WordPress无刷新登录
  • wordpress计数插件云南网络优化公司有哪些
  • 建设网站的文案范文鲜花网站数据库建设分析
  • 手机网站建设行业现状wordpress下载站源码
  • 做交易网站什么开发语言天长网站开发
  • 做冷库用什么网站发帖子好自贡网站建设哪家好
  • 儿童教育网站源码网页制作公司 软件
  • 设计商业网站应该做到什么哔哩哔哩网页版登录入口
  • 自学做视频网站重庆网站建设公司魁网
  • 做网站兴趣爱好网站功能有哪些
  • 分析可口可乐网站建设的目的手机网站建设找哪家好
  • 响应式个人网站psd成都论坛网站建设
  • 郑州做网站优化运营商网络推广工作任务
  • 江门网站建设开发福建漳州网站建设公司
  • 国家建设部网站官网证件查询wordpress mysql优化
  • 免费网站空间注册中国万网网站建设过程
  • 做网站先做首页免费网站排名优化在线
  • 快手刷赞网站推广软件wordpress get_post
  • 做设计找素材的 网站有哪些软文投放平台有哪些?
  • 自做购物网站多少钱怎么建设一个手机网站
  • gta5 网站正在建设中如何建立一个免费网站