package com.jshop.shiro.realm; import java.util.List; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.LockedAccountException; import org.apache.shiro.authc.SimpleAuthenticationInfo; import org.apache.shiro.authc.UnknownAccountException; 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.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; import com.jshop.action.backstage.utils.statickey.StaticKey; import com.jshop.entity.FunctionM; import com.jshop.entity.UserT; import com.jshop.service.UsertService; @Namespace("") @ParentPackage("jshop") public class UserRealm extends AuthorizingRealm { private UsertService usertService; private List<FunctionM> list; public UsertService getUsertService() { return usertService; } public void setUsertService(UsertService usertService) { this.usertService = usertService; } @Override protected AuthorizationInfo doGetAuthorizationInfo( PrincipalCollection principal) { String username = (String) principal.getPrimaryPrincipal(); UserT user = usertService.findByUserName(username); SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); authorizationInfo.setRoles(usertService.findUserRole(user.getUserid())); authorizationInfo.setStringPermissions(usertService .findUserRoleFunctions(user.getUserid())); return authorizationInfo; } @Override protected AuthenticationInfo doGetAuthenticationInfo( AuthenticationToken token) throws AuthenticationException { String username = (String) token.getPrincipal(); UserT user = usertService.findByUserName(username); if (user == null) { throw new UnknownAccountException();// 没有找到账号 } if (StaticKey.UserState.LOCKED.getState().equals(user.getUserstate())) { throw new LockedAccountException();// 账号锁定 } // 交给AuthenticatingRealm使用CredentialsMatcher进行密码匹配 SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo( user.getUsername(), // 用户名 user.getPassword(), // 密码 ByteSource.Util.bytes(user.getCredentialsalt()),// salt=username+salt getName()); // realm name return authenticationInfo; } @Override public void clearCachedAuthorizationInfo(PrincipalCollection principals) { super.clearCachedAuthorizationInfo(principals); } @Override public void clearCachedAuthenticationInfo(PrincipalCollection principals) { super.clearCachedAuthenticationInfo(principals); } @Override public void clearCache(PrincipalCollection principals) { super.clearCache(principals); } public void clearAllCachedAuthorizationInfo() { getAuthorizationCache().clear(); } public void clearAllCachedAuthenticationInfo() { getAuthenticationCache().clear(); } public void clearAllCache() { clearAllCachedAuthenticationInfo(); clearAllCachedAuthorizationInfo(); } }