java - springBoot+spring security+Kaptcha如何实现图片验证码
阿神
阿神 2017-04-18 10:23:20
0
1
1075
@Component
public class MyAuthenticationProvider implements AuthenticationProvider {


    @Autowired
    private CustomUserDetailsService userService;
    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
        String username = authentication.getName();
        String password = (String) authentication.getCredentials();
        CustomUserDetails user = (CustomUserDetails) userService.loadUserByUsername(username);
        if(user == null){
            throw new BadCredentialsException("用户不存在");
        }

        if (!password.equals(user.getPassword())) {
            throw new BadCredentialsException("错误的密码");
        }

        Collection<? extends GrantedAuthority> authorities = user.getAuthorities();
        return new UsernamePasswordAuthenticationToken(user, password, authorities);
    }

    @Override
    public boolean supports(Class<?> arg0) {
        return true;
    }


}

在springBoot项目中有这个类验证用户名和密码。现在想添加图片验证码(Kaptcha)该如何实现???

阿神
阿神

闭关修行中......

Antworte allen(1)
迷茫

重写它这个类,为它添加验证码校验就可以;
这里又一个shiro的添加验证码的方式例子


public class CaptchaFormAuthenticationFilter extends FormAuthenticationFilter{

private static final Logger LOG = LoggerFactory.getLogger(CaptchaFormAuthenticationFilter.class);
private static final String DEFAULT_CAPTCHA_PARAM = "captcha";

private String captchaParam = DEFAULT_CAPTCHA_PARAM;

public String getCaptchaParam() {
    return captchaParam;
}

public void setCaptchaParam(String captchaParam) {
    this.captchaParam = captchaParam;
}

protected String getCaptcha(ServletRequest request){
    
    return WebUtils.getCleanParam(request, captchaParam);
}

public CaptchaFormAuthenticationFilter() {
}

@Override
protected boolean executeLogin(ServletRequest request,
        ServletResponse response) throws Exception {
    CaptchaUsernamePasswordToken token = (CaptchaUsernamePasswordToken) createToken(request, response);
    boolean isValidate = doCaptchaValidate((HttpServletRequest) request,token);
    if(isValidate){
        Subject subject = getSubject(request, response);
        subject.login(token);
        return super.executeLogin(request, response);
    }
    return false;
}

protected boolean doCaptchaValidate(HttpServletRequest request,CaptchaUsernamePasswordToken token){
    String captcha = (String) request.getSession().getAttribute(DEFAULT_CAPTCHA_PARAM);
     if (captcha != null && !captcha.equalsIgnoreCase(token.getCaptcha())) {  
          return false;
      }  
    return true;
} 
/**
 * 创建口令
 */
@Override
protected AuthenticationToken createToken(ServletRequest request,
        ServletResponse response) {
    String captcha = getCaptcha(request);
    String username = getUsername(request);
    String password = getPassword(request);
    boolean rememberMe = isRememberMe(request);
    String host = getHost(request);
    return new CaptchaUsernamePasswordToken(username, password.toCharArray(), rememberMe, host, captcha) ;
}

}

public class CaptchaUsernamePasswordToken extends UsernamePasswordToken {

private static final long serialVersionUID = 8446567829844028162L;
//验证码字符串  
private String captcha;  

public CaptchaUsernamePasswordToken(String username, char[] password,  
        boolean rememberMe, String host, String captcha) {  
    super(username, password, rememberMe, host);  
    this.captcha = captcha;  
}  

public String getCaptcha() {  
    return captcha;  
}  

public void setCaptcha(String captcha) {  
    this.captcha = captcha;  
}  

}

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!