Java tutorial
/** * Copyright 2015. * <p> * Licensed under the Apache License, Version 2.0 (the "License"); */ package cn.mypandora.shiro.realm; import cn.mypandora.po.BaseUser; import cn.mypandora.service.BaseUserService; import org.apache.shiro.authc.*; 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 javax.annotation.Resource; /** * <p>User: kaibo * <p>Date: 2015/7/17 * <p>Version: 1.0 */ public class UserRealm extends AuthorizingRealm { @Resource private BaseUserService baseUserService; /** * ?Subject?? * * @param principals * @return */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { //????,(String)principals.fromRealm(this.getName()).iterator().next() String username = (String) principals.getPrimaryPrincipal(); //??? SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); authorizationInfo.setRoles(baseUserService.findRole(username)); authorizationInfo.setStringPermissions(baseUserService.findPermission(username)); return authorizationInfo; } /** * ??subject * * @param token * @return * @throws AuthenticationException */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { UsernamePasswordToken upToken = (UsernamePasswordToken) token; String username = upToken.getUsername().trim(); BaseUser user = baseUserService.findUserByUsername(username); if (user == null) { throw new UnknownAccountException();//?? } if (Boolean.TRUE.equals(user.getLocked())) { throw new LockedAccountException(); //??? } //AuthenticatingRealmCredentialsMatcher???? SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(user.getUsername(), //?? user.getPassword(), //? ByteSource.Util.bytes(user.getCredentialsSalt()), //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(); } }