当前位置:首页 > 实用技巧 >

如何输入图片验证码(图片数字验证码怎样才能正确输入)

来源:原点资讯(www.yd166.com)时间:2023-04-22 12:29:48作者:YD166手机阅读>>

  • 输入正确的验证码

如何输入图片验证码,图片数字验证码怎样才能正确输入(5)

  • 输入已经使用过的验证码 各位读者是不是会觉得既然继承了 Filter,那是不是每个接口都会进入到我们的自定义方法中呀!如果是继承了 GenericFilterBean、OncePerRequestFilter 那是肯定会的,需要手动处理。 但我们继承的是 UsernamePasswordAuthenticationFilter,security 已经帮忙处理了。处理逻辑在其父类 AbstractAuthenticationProcessingFilter#doFilter 中。

如何输入图片验证码,图片数字验证码怎样才能正确输入(6)

基于认证器

编写自定义认证逻辑

验证码逻辑编写完成,那接下来就自定义一个 VerifyCodeAuthenticationProvider 继承自 DaoAuthenticationProvider,并重写 authenticate 方法。

import org.springframework.security.authentication.AuthenticationServiceException; import org.springframework.security.authentication.dao.DaoAuthenticationProvider; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.util.StringUtils; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; /** * 验证码验证器 */ public class VerifyCodeAuthenticationProvider extends DaoAuthenticationProvider { @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { HttpServletRequest req = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); // 获得请求验证码值 String code = req.getParameter("code"); // 获得 session 中的 验证码值 HttpSession session = req.getSession(); String sessionVerifyCode = (String) session.getAttribute("verify_code"); if (StringUtils.isEmpty(code)){ throw new AuthenticationServiceException("验证码不能为空!"); } if(StringUtils.isEmpty(sessionVerifyCode)){ throw new AuthenticationServiceException("请重新申请验证码!"); } if (!code.toLowerCase().equals(sessionVerifyCode.toLowerCase())) { throw new AuthenticationServiceException("验证码错误!"); } // 验证码验证成功,清除 session 中的验证码 session.removeAttribute("verify_code"); // 验证码验证成功,走原本父类认证逻辑 return super.authenticate(authentication); } }

自定义的认证逻辑完成了,剩下的问题就是如何让 security 走我们的认证逻辑了。

在 security 中,所有的 AuthenticationProvider 都是放在 ProviderManager 中统一管理的,所以接下来我们就要自己提供 ProviderManager,然后注入自定义的 VerifyCodeAuthenticationProvider。

  • SecurityConfig

import cn.cxyxj.study02.config.MyAuthenticationFailureHandler; import cn.cxyxj.study02.config.MyAuthenticationSuccessHandler; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.ProviderManager; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.password.NoOpPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.provisioning.InMemoryUserDetailsManager; @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Bean PasswordEncoder passwordEncoder() { return NoOpPasswordEncoder.getInstance(); } @Bean @Override protected UserDetailsService userDetailsService() { InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); manager.createUser(User.withUsername("cxyxj").password("123").roles("admin").build()); manager.createUser(User.withUsername("security").password("security").roles("user").build()); return manager; } @Bean VerifyCodeAuthenticationProvider verifyCodeAuthenticationProvider() { VerifyCodeAuthenticationProvider provider = new VerifyCodeAuthenticationProvider(); provider.setPasswordEncoder(passwordEncoder()); provider.setUserDetailsService(userDetailsService()); return provider; } @Override @Bean public AuthenticationManager authenticationManagerBean() throws Exception { ProviderManager manager = new ProviderManager(verifyCodeAuthenticationProvider()); return manager; } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() //开启配置 // 验证码接口放行 .antMatchers("/verify-code").permitAll() .anyRequest() //其他请求 .authenticated()//验证 表示其他请求需要登录才能访问 .and() .formLogin() .loginPage("/login.html") //登录页面 .loginProcessingUrl("/auth/login") //登录接口,此地址可以不真实存在 .usernameParameter("account") //用户名字段 .passwordParameter("pwd") //密码字段 .successHandler(new MyAuthenticationSuccessHandler()) .failureHandler(new MyAuthenticationFailureHandler()) .permitAll() // 上述 login.html 页面、/auth/login接口放行 .and() .csrf().disable(); // 禁用 csrf 保护 ; } }

测试

  • 不传入验证码发起请求。
  • 请求获取验证码接口

如何输入图片验证码,图片数字验证码怎样才能正确输入(7)

  • 输入错误的验证码

如何输入图片验证码,图片数字验证码怎样才能正确输入(8)

栏目热文

高中语文议论文阅读答题技巧(高中议论文阅读答题技巧模板)

高中语文议论文阅读答题技巧(高中议论文阅读答题技巧模板)

议论文阅读理解也是高中语文考试中的一项知识点,此类论述类文本阅读的考察,通常以选择题的方式出现,虽然分数占比没有太高,但...

2023-04-22 12:21:29查看全文 >>

高中语文阅读答题技巧论证方法(高中语文阅读答题技巧全套选择题)

高中语文阅读答题技巧论证方法(高中语文阅读答题技巧全套选择题)

语文阅读题方法归类一、表达方式:记叙、描写、抒情、说明、议论二、表现手法:象征、对比、烘托、设置悬念、前后呼应、欲扬先抑...

2023-04-22 12:01:14查看全文 >>

高中语文阅读题顺序答题技巧(高中语文阅读题答题套路和方法)

高中语文阅读题顺序答题技巧(高中语文阅读题答题套路和方法)

语文阅读理解的答题方法1.文章体裁?此文是一篇。诗歌、小说、散文(抒情散文、叙事散文)、戏剧、记叙文、说明文、议论文2...

2023-04-22 12:14:07查看全文 >>

高中语文教资答题技巧全套(高中语文答题技巧全套 新高考)

高中语文教资答题技巧全套(高中语文答题技巧全套 新高考)

高中语文答题技巧全套!语文似乎并不难,但想要取得一个高分却很不容易。掌握一些答题技巧,可以更轻松更流畅的答题。本文总结的...

2023-04-22 12:07:57查看全文 >>

初中语文阅读答题技巧(初中语文阅读答题技巧及套路)

初中语文阅读答题技巧(初中语文阅读答题技巧及套路)

中考阅文阅读的重点之一是记叙文、散文知识。其实,对文章的整体感知十分重要。整体感知包括对文章主旨的理解,对文章线索的把握...

2023-04-22 12:00:35查看全文 >>

图形码正确输入方法(手机图形验证码怎么输入)

图形码正确输入方法(手机图形验证码怎么输入)

近日,有市民咨询,称想了解如何网上自助办理异地就医备案。对此,西安市未央区徐家湾街道办详细整理了步骤:首先,登录 西安市...

2023-04-22 11:57:05查看全文 >>

怎样正确输入图形验证码(怎样输入数字图形验证码)

怎样正确输入图形验证码(怎样输入数字图形验证码)

叮~叮~叮~【党员干部接待岗问答】又上线了保定市公安交警支队为深化车检改革新措施推出了车检网上预约、“交钥匙”服务需要车...

2023-04-22 12:02:10查看全文 >>

字母图形验证码怎么输入才正确(怎样正确输入图形验证码)

字母图形验证码怎么输入才正确(怎样正确输入图形验证码)

多年预约经验分享给大家。高手勿喷。1、定个闹钟。现在热门纪念币预约基本秒光,所以要在预约期的第一天准点参加,准点到什么程...

2023-04-22 12:17:38查看全文 >>

快速输入图形验证码(图形验证码怎么输入才正确)

快速输入图形验证码(图形验证码怎么输入才正确)

老年人学手机(197)不用打数字快速填写验证码请看演示视频,然后再详细看文字内容: 因为平常我们登录一些软件的时...

2023-04-22 12:28:44查看全文 >>

图形数字验证码怎么输入(图形验证码怎么输入才正确)

图形数字验证码怎么输入(图形验证码怎么输入才正确)

今天上午收到广东移动通讯信息说我账户余额不足,不足以扣月租(扣月租的时间是每个月10号,时间还没到,只是提醒)。我感觉...

2023-04-22 12:26:40查看全文 >>

文档排行