CasUserRealm.java 2.2 KB
package com.framework.shiro;

import java.util.List;
import java.util.Set;

import javax.annotation.Resource;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.cas.CasRealm;
import org.apache.shiro.subject.PrincipalCollection;

import com.agent.entity.system.PermissionEntity;
import com.agent.entity.system.UserEntity;
import com.agent.service.system.RoleService;
import com.agent.service.system.UserService;
import com.google.common.collect.Sets;

public class CasUserRealm extends CasRealm{
	
	@Resource
	private UserService userService;
	
	@Resource
	private RoleService roleService;
	

	/**
	 * 返回当前subject的授权信息
	 * 交由shiro的Authorizer鉴权
	 */
	@Override
	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
		SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
		String loginAccount = (String) principals.getPrimaryPrincipal();
		UserEntity user = userService.findByLoginaccount(loginAccount);
		Set<String> roles = Sets.newHashSet(user.getRole().getId().toString());
		authorizationInfo.setRoles(roles);
		System.out.println("This is waht? That I wang to!");
		//查询权限字符串
		List<PermissionEntity> list = roleService.findAllPermisstionByRole(user.getRole());
		Set<String> permisstions = Sets.newTreeSet();
		for(PermissionEntity permisstion:list) {
			permisstions.add(permisstion.getMenu().getPermission());
		}
		authorizationInfo.setStringPermissions(permisstions);
		return authorizationInfo;
	}
	
	
	
	/**
	 * 1、CAS认证 ,验证用户身份
	 * 2、将用户基本信息设置到会话中
	 */
	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) {
		AuthenticationInfo authc = super.doGetAuthenticationInfo(token);
		String account = (String) authc.getPrincipals().getPrimaryPrincipal();
		UserEntity user = userService.findByLoginaccount(account);
		SecurityUtils.getSubject().getSession().setAttribute("user", user);
		return authc;
	}
	
	

}