您的位置:首页 > 运维架构 > 网站架构

shiro自定义密码匹配验证,密码加密验证。

2017-03-28 17:55 363 查看
1.更改shiro安全管理配置

<!-- 定义Shiro安全管理配置 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<!--  		<property name="realm" ref="systemAuthorizingRealm" />  -->
<property name="realm" ref="userRealm" />
<property name="sessionManager" ref="sessionManager" />
<property name="cacheManager" ref="shiroCacheManager" />
</bean>

<!-- 3.1 直接配置继承了org.apache.shiro.realm.AuthorizingRealm的bean -->
<bean id="userRealm" class="com.thinkgem.jeesite.modules.sys.security.SystemAuthorizingRealm">
<!-- 配置密码匹配器 -->
<property name="credentialsMatcher" ref="credentialsMatcher"/>
</bean>

<!-- 凭证匹配器 -->
<bean id="credentialsMatcher" class="com.thinkgem.jeesite.modules.sys.security.CustomCredentialsMatcher">
</bean>


<property name="realm" ref="systemAuthorizingRealm" /> ,Spring自动注入。

2.自定义密码验证

/**
* Description: 告诉shiro如何验证加密密码,通过SimpleCredentialsMatcher或HashedCredentialsMatcher
* @Author: wjl
* @Create Date: 2017-3-14
*/

public class CustomCredentialsMatcher extends SimpleCredentialsMatcher {

@Override
public boolean doCredentialsMatch(AuthenticationToken authcToken, AuthenticationInfo info) {

UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
Object accountCredentials = getCredentials(info);
//	String pwd =encrypt32(String.valueOf(token.getPassword()));//md5 32位加密
String pwdType =String.valueOf(token.getPassword());// 判断一下密码是否是用户输入的,还是JCIS传过来的
if(pwdType.length() == 32){
return equals(pwdType, accountCredentials); //密码长度=32位,说明是md5加密过,是从xx传进来的 32位加密。
}
String pwdUser =encrypt32(String.valueOf(token.getPassword()));//不等于32 是用户输入的密码。 如果用户输入的密码长度位32那么里面会有一个bug
return equals(pwdUser, accountCredentials);
//将密码加密与系统加密后的密码校验,内容一致就返回true,不一致就返回false
//return super.doCredentialsMatch(token, info) ;
}
3.更改密码验证,注释掉自带的。
/**
* 设定密码校验的Hash算法与迭代次数
*/
//	@PostConstruct
//	public void initCredentialsMatcher() {
//		HashedCredentialsMatcher matcher = new HashedCredentialsMatcher(SystemService.HASH_ALGORITHM);
//		matcher.setHashIterations(SystemService.HASH_INTERATIONS);
//		setCredentialsMatcher(matcher);
//	  //  setCredentialsMatcher(new CustomCredentialsMatcher());
//	}


如果不注释就是用这种方式也可以。
/**
* 设定密码校验的Hash算法与迭代次数
*/
@PostConstruct
public void initCredentialsMatcher() {
setCredentialsMatcher(new CustomCredentialsMatcher());
}


搞定收工!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息