shiro 认证 + 授权 重写

import org.apache.shiro.SecurityUtils;
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.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.subject.SimplePrincipalCollection;
import org.springframework.beans.factory.annotation.Autowired;

import com.example.demo.dao.User;
import com.example.demo.service.UserService;


/**  
* @ClassName: MyRealm  
* @Description: shiro 认证 + 授权   重写 */
public class MyRealm extends AuthorizingRealm {
	@Autowired
	private UserService userService;
	
	@Override
	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
		String account = (String)principals.getPrimaryPrincipal();
		User user = new User();
		user.setUsername(account);
		String userId = user.getId();
		SimpleAuthorizationInfo info =  new SimpleAuthorizationInfo();
		/**根据用户ID查询角色(role),放入到Authorization里.*/
		info.setRoles(userService.findRoleByUserId(userId));
		/**根据用户ID查询权限(permission),放入到Authorization里.*/
		info.setStringPermissions(userService.findPermissionByUserId(userId));
        return info; 
		
	}

	@Override
	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
		String phone = (String)token.getPrincipal();  				//得到用户名 
	    String password = new String((char[])token.getCredentials()); 	//得到密码
	    //根据用户名从数据库获取密码
//        String pword = "123";
//        if (phone == null) {
//            try {
//				throw new AccountException("用户名不正确");
//			} catch (AccountException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
//        } else if (!password.equals(pword )) {
//            try {
//				throw new AccountException("密码不正确");
//			} catch (AccountException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
//        }
//        return new SimpleAuthenticationInfo(phone, password,getName());
	    
	    

	    if(null != phone && null != password){
	    	return new SimpleAuthenticationInfo(phone, password, getName());
	    }else{
	    	return null;
	    }
	    
	    
	}

	 /**
     * 清空当前用户权限信息
     */
    public  void clearCachedAuthorizationInfo() {
        PrincipalCollection principalCollection = SecurityUtils.getSubject().getPrincipals();
        SimplePrincipalCollection principals = new SimplePrincipalCollection(
                principalCollection, getName());
        super.clearCachedAuthorizationInfo(principals);
    }
    /**
     * 指定principalCollection 清除
     */
    public void clearCachedAuthorizationInfo(PrincipalCollection principalCollection) {
        SimplePrincipalCollection principals = new SimplePrincipalCollection(
                principalCollection, getName());
        super.clearCachedAuthorizationInfo(principals);
    }
    
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值