系统可能存在多种登录方式,微信扫码登录,电话验证码登录,用户名密密码登录等。
按照正常情况,不同的登录方式 ,调用的接口 也不一样。
@Bean
public DefaultWebSecurityManager securityManager(CookieRememberMeManager rememberMeManager, SessionManager sessionManager) {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
List<Realm> realms = new ArrayList<>();
realms.add(this.shiroDbRealm());
realms.add(this.phoneAndVcodeRealm());
realms.add(this.weChatRealm());
realms.add(this.passwordRealm());
securityManager.setRealms(realms);
//securityManager.setCacheManager(cacheShiroManager);
securityManager.setRememberMeManager(rememberMeManager);
securityManager.setSessionManager(sessionManager);
return securityManager;
}
Realm 可以定义多个,根据验证策略 是否全部验证通过 还是只验证一个就行。
public class PasswordRealm extends AuthorizingRealm {
/**
* 登录认证
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken)
throws AuthenticationException {
UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) authcToken;
String vCode = new String(usernamePasswordToken.getPassword());
return new SimpleAuthenticationInfo(vCode, vCode, super.getName());
}
/**
* 权限认证
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
return null;
}
/* *//**
* 设置认证加密方式
*//*
@Override
public void setCredentialsMatcher(CredentialsMatcher credentialsMatcher) {
HashedCredentialsMatcher md5CredentialsMatcher = new HashedCredentialsMatcher();
md5CredentialsMatcher.setHashAlgorithmName(ShiroKit.hashAlgorithmName);
md5CredentialsMatcher.setHashIterations(ShiroKit.hashIterations);
super.setCredentialsMatcher(md5CredentialsMatcher);
}*/
@Override
public boolean supports(AuthenticationToken authcToken){
LoginToken loginToken = (LoginToken) authcToken;
if (loginToken.getLoginType() == LoginTypeEnum.CUSTOMER_PASSWORD){
return true;
}else{
return false;
}
}
}
supports 这个方法 主要用来,这个Relam是否支持当前登录方式 ,如果支持返回true,不支持返回false,一般支持一种就可以。
其余的和一种登录方式一致。