Java tutorial
/******************************************************************************* * Copyright (c) 2014, 2016 cetian tech * * Licensed under the Apache License, Version 2.0 (the "License"); *******************************************************************************/ package com.cetian.module.weixin.service; import javax.annotation.PostConstruct; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.SimpleAuthenticationInfo; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.authc.credential.HashedCredentialsMatcher; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.authz.SimpleAuthorizationInfo; import org.apache.shiro.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection; import org.apache.shiro.util.ByteSource; import org.springside.modules.utils.Encodes; import com.cetian.module.weixin.model.ShiroUser; import com.cetian.module.weixin.model.WeixinUser; public class ShiroDbRealm extends AuthorizingRealm { protected WeixinUserService weixinUserService; /** * ?,. */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException { UsernamePasswordToken token = (UsernamePasswordToken) authcToken; WeixinUser user = weixinUserService.findUserByLoginName(token.getUsername()); if (user != null) { byte[] salt = Encodes.decodeHex(user.getSalt()); return new SimpleAuthenticationInfo(new ShiroUser(user.getId(), user.getLoginName(), user.getName()), user.getPassword(), ByteSource.Util.bytes(salt), getName()); } else { return null; } } /** * ?, ???. */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { ShiroUser shiroUser = (ShiroUser) principals.getPrimaryPrincipal(); WeixinUser user = weixinUserService.findUserByLoginName(shiroUser.loginName); SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); info.addRoles(user.getRoleList()); return info; } /** * PasswordHash. */ @PostConstruct public void initCredentialsMatcher() { HashedCredentialsMatcher matcher = new HashedCredentialsMatcher(WeixinUserService.HASH_ALGORITHM); matcher.setHashIterations(WeixinUserService.HASH_INTERATIONS); setCredentialsMatcher(matcher); } public void setWeixinUserService(WeixinUserService weixinUserService) { this.weixinUserService = weixinUserService; } }