shiro 实现自定义权限规则校验
<span style="font-family: Arial, Helvetica, sans-serif;">在系统中使用shiro进行权限管理,当用户访问没有权限的资源时会跳转到指定的登录url。</span>
但是如果系统中支持手机app,手机访问时没有使用session进行登录凭证管理,而是使用token,有两种解决方法:
1:支持手机客户端访问的资源在权限配置中配置成anon
2:实现自定义认证拦截器,对用户请求资源进行认证
显然第一种方法不适用,这些资源应该只能让我们自己的app进行访问。
第二中实现方式:
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<!-- 登录的页面 -->
<property name="loginUrl" value="/login/login.jsp" />
<property name="successUrl" value="/success.jsp" />
<property name="unauthorizedUrl" value="/error.jsp" />
<property name="filterChainDefinitions">
<value>
/android.html**=anon
/pets/android**=android
/pets/login/**=anon
/**=authc
</value>
</property>
<property name="filters">
<map>
<entry key="android">
<bean class="com.pets.shiro.filter.MobileTokenAuthentication">
</bean>
</entry>
<entry key="authc">
<bean class="com.pets.shiro.filter.LoginAuthenticationFilter">
</bean>
<!-- <bean class="org.apache.shiro.web.filter.authc.FormAuthenticationFilter">
</bean> -->
</entry>
</map>
</property>
</bean>
/pets/android**=android 指定认证的拦截器,这里是自定义的拦截器
<pre name="code" class="java">/**
* 移动设备认证基类,提供未登录用户操作认证权限
*
* 2014年7月8日
*/
public abstract class AbstractMobileAuthenticationFilter extends
AuthenticationFilter { public static final String TOKEN = "token";
protected Logger log = Logger.getLogger(getClass()); @Override
protected boolean onAccessDenied(ServletRequest request,
ServletResponse response) throws Exception { log.info("安卓用户进入校验!" + getLoginUrl()); HttpServletRequest req = (HttpServletRequest) request; String token = req.getParameter(TOKEN);
if (isAccess(token)) {
return onAccessSuccess(req, (HttpServletResponse) response);
} return onAccessFail(req, (HttpServletResponse) response);
} /**
* 判断token的合法性
*
* @param token
* @return
*/
public abstract boolean isAccess(String token); /**
* 认证成功进行的操作处理
*
* @param request
* @param response
* @return true 继续后续处理,false 不需要后续处理
*/
public abstract boolean onAccessSuccess(HttpServletRequest request,
HttpServletResponse response); /**
* 认证失败时处理结果
*
* @param request
* @param response
* @return true 继续后续处理,false 不需要后续处理
*/
public abstract boolean onAccessFail(HttpServletRequest request,
HttpServletResponse response); }
只需要重写onAccessDenied方法,进行token判断!
shiro 实现自定义权限规则校验的更多相关文章
- shiro 实现自己定义权限规则校验
<span style="font-family: Arial, Helvetica, sans-serif;">在系统中使用shiro进行权限管理,当用户訪问没有权限 ...
- 9) drf JWT 认证 签发与校验token 多方式登陆 自定义认证规则反爬 admin密文显示
一 .认证方法比较 1.认证规则图 django 前后端不分离 csrf认证 drf 前后端分离 禁用csrf 2. 认证规则演变图 数据库session认证:低效 缓存认证:高效 jwt认证:高效 ...
- 基于SpringSecurity的@PreAuthorize实现自定义权限校验方法
一.前言 在我们一般的web系统中必不可少的就是权限的配置,也有经典的RBAC权限模型,是基于角色的权限控制.这是目前最常被开发者使用也是相对易用.通用权限模型.当然SpringSecurity已经实 ...
- 案例17-validate自定义校验规则校验验证码是否输入正确
1 自定义校验规则代码 <script type="text/javascript"> //使用validate插件进行表单的校验 $(function(){ $(&q ...
- Spring_数据校验和自定义检验规则和分组校验
@Validated :绑定需要校验的数据. 数据校验规则:为数据绑定校验的规则 private Long booId;@NotNull(message = "不能为空")pri ...
- Apache Shiro安全(权限框架)学习笔记二
课程目标 通过学习本课程掌握权限管理的设计思想及方法,使用Shiro框架完成权限管理功能开发. 1. 理解基于资源的权限管理方法. 2. 掌握权限管理的数据模型. 3. 掌握不使用shiro开发 ...
- Apache Shiro安全(权限框架)学习笔记一
1. 授权需要继承 AuthorizingRealm 类, 并实现其 doGetAuthorizationInfo 方法 2. AuthorizingRealm 类继承自 Authenticating ...
- DRF认证、自定义认证和权限、自定义权限
源码分析 """ 1)APIView的dispath(self, request, *args, **kwargs) 2)dispath方法内 self.initial( ...
- shiro:自定义remle(二)
SpringMVC+SpringMVC+Mybatis项目 1:导入相关依赖 <dependencies> <!--测试依赖--> <dependency> < ...
随机推荐
- Soul Android app 悬浮view以及帖子中view的联动刷新逆向分析
Soul app是我司的竞品,对它的语音音乐播放同步联动的逻辑很感兴趣,于是就开启了一波逆向分析. 下面看代码,以及技术分析,直接步入正轨,哈哈. 我们根据https://github.com/xin ...
- 双系统情况下,ubuntu开机挂载Windows分区
首先:blkid,查看分区所属uuid 其中 /dev/sda5 就是Windows分区 其次:fdisk -l,查看分区情况 通过硬盘大小找到对应要设置的具体分区(其实这步也不用,我只是为了确定) ...
- sqlilab11-14
less11 抓包 ' " 实验发现'构成闭合,存在注入点 less-12 a,b都有注入点,b比较好判断闭合 less13 less14
- 五分钟秒懂机器学习混淆矩阵、ROC和AUC
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第18篇文章,我们来看看机器学习领域当中,非常重要的其他几个指标. 混淆矩阵 在上一篇文章当中,我们在介绍召回率.准确率 ...
- hash算法解决冲突的方案
1, 开放定址法: 所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入 公式为:fi(key) = (f(key)+di) MOD m ...
- ansible的role(6)
roles的优点 roles能够根据层次型结构自动的装载变化量文件,task,以及handles等. 要使用肉了是只需要在playbook中使用include引入即可. 主要使用场景复制代码较高的情况 ...
- cocos2d 导演,场景
导演(Director) Cocos2d-x 使用导演的概念,这个导演和电影制作过程中的导演一样!导演控制电影制作流程,指导团队完成各项任务.在使用 Cocos2d-x 开发游戏的过程中,你可以认为自 ...
- 利用python将excel数据导入mySQL
主要用到的库有xlrd和pymysql, 注意pymysql不支持python3 篇幅有限,只针对主要操作进行说明 连接数据库 首先pymysql需要连接数据库,我这里连接的是本地数据库(数据库叫ld ...
- Libra教程之:执行Transactions
文章目录 Transactions是什么 Transactions运行的基础条件 Transactions的结构 执行Transactions Transactions是什么 我们讲到了Libra是一 ...
- 【DNS域名解析命令】host
host - DNS lookup utility host命令是常用的分析域名查询工具,可以用来测试域名系统工作是否正常. 语法: host [-aCdlnrsTwv] [-c class] [-N ...