码迷,mamicode.com
首页 > Web开发 > 详细

项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示

时间:2018-07-01 18:19:01      阅读:633      评论:0      收藏:0      [点我收藏+]

标签:死循环   font   需要   四种   struts   基于   扫描   apache   管理   

课程计划

1、 常见权限控制方式

2、 基于shiro提供url拦截方式验证权限

3、 realm中授权

4、 基于shiro提供注解方式验证权限

5、 总结验证权限方式(四种)

6、 用户注销

7、 基于treegrid实现菜单展示

常见的权限控制方式

2.1 url拦截实现权限控制

shiro基于过滤器实现的

 技术分享图片

 

2.2 注解方式实现权限控制

底层:代理技术

 

 技术分享图片

 

基于shirourl拦截方式验权

 技术分享图片

 

 

<!-- 配置过滤器工厂 -->

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">

<!-- 注入安全管理器 -->

<property name="securityManager" ref="securityManager"></property>

<!-- 注入相关页面

loginUrl :登陆页面=用户没有登录,访问某个url(要求当前用户登陆后可见)shiro框架跳转登录页

    successUrl;登陆成功页面=可以不配(通过struts2框架跳转)

    unauthorizedUrl;权限不足页面=用户登陆后访问url(要求必须有某个权限),如果用户没有权限,跳转此页面

 -->

<property name="loginUrl" value="/login.jsp"></property>

<property name="unauthorizedUrl" value="/unauthorized.jsp"></property>

<!-- 配置过滤器链:配置项目中url对应拦截规则(怎么验权) -->

<!--

等号左侧代表项目url    /** 项目中所有url

等号右侧代表url经过哪个过滤器(shiro框架提供,使用简称即可)

authc:表单认证过滤器(访问url,要求当前用户必须认证通过后才有权限访问)

anon:匿名过滤器(访问url,不需要登陆,不需要有权限==直接放行)

perms:权限授权过滤器(访问url,要求当前用户必须有某个权限)

roles:角色授权过滤器(访问url,要求当前用户必须有某个角色)

 -->

<property name="filterChainDefinitions">

<value>

/js/** = anon

/images/** = anon

/css/** = anon

/login.jsp = anon

/validatecode.jsp* = anon

/userAction_login.action = anon

/pages/base/standard.jsp = perms["standard_page"]

<!-- /courierAction_delete.action = perms["courier_delete"] -->

/pages/base/courier.jsp = roles["admin"]

/** = authc

</value>

</property>

</bean>

访问:使用权限过滤器perms 拦截到用户请求后,而当前用户没有任何权限

 技术分享图片

 

realm中授权

 

通过url控制权限:当某个请求需要进行权限校验,角色校验时候,安全管理器会调用reaml中授权的方法;获取用户角色,以及权限。

 

 

 

/**

 

  * @Description: 给用户进行授权

 

*/

 

protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {

 

System.out.println("给用户授权");

 

//获取当前用户

 

User user = (User) SecurityUtils.getSubject().getPrincipal();

 

//数据库结构 用户-角色:多对多  角色-权限:多对多  可以根据用户id查询用户权限

 

//TODO 给用户授权只能是硬编码  ,后期改为查询数据库

 

 

 

//创建简单授权信息(包含当前用户对应的权限,角色)

 

SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();

 

//添加权限标识,注意这里不能添加空白权限

 

//跟过perms滤器中,要求权限标识一样

 

info.addStringPermission("courier_page");

 

info.addRole("admin");

 

return info;

 

}

 

 

 

基于shiro的注解方式验权

 技术分享图片

 

 

 

1.1 开启shiro注解支持

 

<!-- 开启shiro注解支持 -->

 

<!--

 

自动代理:自动根据情况不同选择代理技术

 

有接口:使用jdk动态代理==产生实现类代理对象

 

没有接口:使用cglib动态代理==产生子类代理对象

 

设置自动代理:强制使用cglib动态代理产生代理对象==如果使用自动代理使用jdk动态代理。产生对象为null -->

 

<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">

 

<property name="proxyTargetClass" value="true"></property>

 

</bean>

 

 

 

<!-- 配置验权切面:通知/增强(扩展功能代码:验证权限)+切点(shiro注解所在方法) -->

 

<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"></bean>

 

 

 技术分享图片

 

1.2 Service中方法上使用shiro注解

 

 技术分享图片

 

 

 

 

验证当前用户是否有权限,当没有权限时候,shiro框架抛出异常;

 

解决:在Realm中给用户进行授权;给当前用户增加权限即可

 

 

 

 

 技术分享图片

 

 

 技术分享图片

 

1.3 使用struts2框架处理异常信息

 

 

 

 

 技术分享图片

 

 

 

 

 技术分享图片

 

 

 技术分享图片

 

总结权限控制方式

 

1、 url拦截:底层基于过滤器;在spring容器中配置过滤器链,配置项目中url对应拦截规则,注意:配置顺序

 

 

 

 

 技术分享图片

 

2、 注解方式:底层基于动态代理

 

a) 第一步开启shiro注解扫描 注意:强制使用cglib方式;事务注解也要使用cglib方式

 

b) 第二步:service层中方法上使用shrio注解

 

3、 Shiro页面标签控制

 

<%@ taglib uri="http://shiro.apache.org/tags" prefix="shiro"%>

 

 

 技术分享图片

 

4、 代码级别

 

 

 技术分享图片

 

Shiro框架应用

技术分享图片

 

 

基于shiro框架实现用户注销

1、 修改index.jsp页面退出时的请求地址

 

 技术分享图片

 

2、 Action中提供logout方法

 

 技术分享图片

 

 

菜单的查询

项目部署后,菜单数据,通过sql脚本直接添加到数据库中。

 技术分享图片

 

菜单表自关联;

 技术分享图片

 

1.1 treeGrid展示菜单数据

 

 技术分享图片

 

Treegrid要求的数据格式

 技术分享图片

 

 

1、 页面:pages/system/menu.jsp

 技术分享图片

 

2、 创建菜单三层对象-完成注入 –

3、 问题一:由于要求返回json包含children 并且方式 出现No-session

 技术分享图片

 

4、 解决:将子节点数据立即加载

 技术分享图片

 

5、 json数据时候死循环

 技术分享图片

 

6、 问题:重复数据

Servie:

 

 技术分享图片

 

技术分享图片

 

项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示

标签:死循环   font   需要   四种   struts   基于   扫描   apache   管理   

原文地址:https://www.cnblogs.com/shan1393/p/9250720.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!