使用shiro内置的过滤器拦截资源
filterMap.put("/useradd","perms[user:add]"); //拦截 useradd user:add (授权字符串)是相应的权限 会在授权逻辑的 realm里面进行配置和检测
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
System.out.println("执行授权逻辑");
//给资源进行授权
/**
* 这里有一点需要主要的是 有一个类个这个十分相似 不要搞错了
* SimpleAuthorizationInfo 正确类
* SimpleAuthenticationInfo 错误类 错误类里面没有添加授权字符串的方法
*/
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
//添加授权字符串 添加了之后用户才有相应的权限 才能够访问相应的url
// info.addStringPermission("user:add");
//到数据库查询当前登陆的用户的授权字符串
//获取当前的登录用户 Principal:负责人 主要的
Subject subject = SecurityUtils.getSubject();
// user u = (user) subject.getPrincipal();
UsernamePasswordToken token = (UsernamePasswordToken) subject.getPrincipal();
user u2=null;
/**
* 点评:
* 这个是通过user表 直接查询的 在实际中应该是权限另有一张其他的表(因为一个用户不是只有一个权限 所以此处应该是查询一张权限表
* ) 然后返回一个权限字符串的list 然后把list里面的内容全部加到权限里面去
*/
try {
// u2 = findUser.findPerms(u.getPhonenum());
u2 = findUser.findPerms(token.getUsername());
info.addStringPermission(u2.getPerms());
} catch (SQLException e) {
e.printStackTrace();
}
return info;
}