所谓的验证码登录也就是 验证码正确之后利用shiro的免密登录啦
验证码的验证:发送短信的时候,把验证码信息放到缓存里(key为sessionid),表单提交过来的时候,从缓存里拿出来比较就好。
接下来就是shiro 的免密登录:http://github.crmeb.net/u/defu
1、思路
自定义token,在进行授权时判断是密码登陆或无密码登陆,自定义密码认证方法,即写一个方法继承HashedCredentialsMatcher,重写其中的doCredentialsMatch,将其中的token改写为自定义的token,最后将自己写的密码认证方法注入shiro
2、源码
1、shiro中有一个类HashedCredentialsMatcher,其中doCredentialsMatch为验证密码的方法
2、在ShiroDbRealm中普通登录用的是划红框的UsernamePasswordToken,免密登录的话需要自定义一个Token;
3、免密登录
1)创建一个枚举类
public enum LoginType {
PASSWORD("password"), // 密码登录
NOPASSWD("nopassword"); // 免密登录
private String code;
private LoginType(String code) {
this.code = code;
}
public String getCode () {
return code;
}
}
2)自定义Token
import org.apache.shiro.authc.UsernamePasswordToken;
/**
* 用于免密登录
*/
public class EasyTypeToken extends UsernamePasswordToken {
private static final long serialVersionUID = -775223922389896739L;
private LoginType type;
public EasyTypeToken() {
super();
}
public EasyTypeToken(String username, S