本次Demo直接使用 Shiro——实现权限控制demo思路(包含自定义标签hasAnyPermission)中的Shiro权限管理的Demo,可点击链接前往查看:https://blog.csdn.net/fancheng614/article/details/83718096
在使用CAS+Shiro实现认证授权时,首先得在Shiro的demo中加入jar包:cas-client-core-3.2.1.jar、shiro-cas-1.3.2.jar。
然后需要在Shiro的Demo基础上修改一些文件。
CAS+Shiro的Demo下载(其中数据库表接口点击查看表结构查看):源码下载
1、将原有的ShiroRealm.java换成MyCasRealm.java。
这两个Realm主要区别是:ShiroRealm.java继承了AuthorizingRealm类,MyCasRealm.java继承了CasRealm类。
下面是MyCasRealm.java的代码,可以将https://download.csdn.net/download/fancheng614/10763926中的Shiro的Demo下载下来与ShiroRealm.java进行对比。
package com.mfc.realm;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.shiro.SecurityUtils;
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.cas.CasAuthenticationException;
import org.apache.shiro.cas.CasRealm;
import org.apache.shiro.cas.CasToken;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.subject.SimplePrincipalCollection;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.CollectionUtils;
import org.apache.shiro.util.StringUtils;
import org.jasig.cas.client.authentication.AttributePrincipal;
import org.jasig.cas.client.validation.Assertion;
import org.jasig.cas.client.validation.TicketValidationException;
import org.jasig.cas.client.validation.TicketValidator;
import org.springframework.beans.factory.annotation.Autowired;
import com.mfc.dao.TRolePopedomDao;
import com.mfc.dao.TUserRoleDao;
import com.mfc.dao.TuserDao;
import com.mfc.entity.TRolePopedom;
import com.mfc.entity.TUserRole;
import com.mfc.entity.Tuser;
public class MyCasRealm extends CasRealm {
@Autowired
private TuserDao tuserDao;
@Autowired
private TUserRoleDao tUserRoleDao;
@Autowired
private TRolePopedomDao tRolePopedomDao;
// 授权的方法
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
// 1.从PrincipalCollection中获取登陆用户的信息
Object principal = principals.getPrimaryPrincipal();
// 2.利用登陆用户的信息来获取当前用户的角色和权限(需要查询数据库)
Set<String> roles = new HashSet<String>(); // 角色
Set<String> popedoms = new HashSet<String>(); // 权限
Tuser tuser = (Tuser) principal;
TUserRole tUserRole = new TUserRole();
tUserRole.setUserId(tuser.getUserId());
List<TUserRole> userRoles = tUserRoleDao.find(tUserRole);
for (TUserRole tUserRole2 : userRoles) {
// 赋予用户角色
roles.add(tUserRole2.getRoleId());
// 查询角色下面