Spring整合Shiro安全框架 ##
----------
### **Shiro框架的配置**
1. 导入jar包,如果使用了Maven,引入坐标即可(项目配置文件中已经引入)
2. 配置Spring整合Shiro的核心过滤器,核心filter,一个filter相当于10个filter
* 代码如下
<!-- Shiro Security filter filter-name这个名字的值将来还会在spring中用到 -->
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3. Spring整合Shiro框架,需要配置
* 创建applicationContext-shiro.xml的配置文件,引入约束
* 在applicationContext配置文件引入<import resource="classpath:spring/applicationContext-shiro.xml"></import>
4. 配置DelegatingFilterProxy过滤器,通过shiroFilter名称去IOC的容器中查找对象,配置该对象(配置具体的规则)
<!-- filter-name这个名字的值来自于web.xml中filter的名字 -->
<bean >,判断认证通过后的用户,是否拥有系统首页的权限?如果该用户拥有系统首页权限,把标签中间的内容显示到页面上。
3.打开AuthRealm类,完成授权的方法编写,具体的代码如下
/**
* 授权
*/
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection pc) {
// 从AuthenticationInfo中获取到用户对象
User user = (User) pc.fromRealm(this.getName()).iterator().next();
List<String> list = new ArrayList<String>();
// 继续操作,通过对象导航的方式,获取到该用户下的角色,具有哪些权限
Set<Role> roles = user.getRoles();
// 遍历,获取到每一个角色对象
for (Role role : roles) {
// 通过角色对象获取到该角色具有的权限
Set<Module> modules = role.getModules();
for (Module module : modules) {
list.add(module.getName());
}
}
//这个SimpleAuthorizationInfo 对象封装的是授权信息,以后要判断某个方法或者按钮是否拥有权限,只需要用spring提供的对应标签即可(Permissions)
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
info.addStringPermissions(list);
return info;
}
注意:此随笔是本人在网上借鉴某某机构所得。