<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 实现自定义权限规则校验的更多相关文章

  1. shiro 实现自己定义权限规则校验

    <span style="font-family: Arial, Helvetica, sans-serif;">在系统中使用shiro进行权限管理,当用户訪问没有权限 ...

  2. 9) drf JWT 认证 签发与校验token 多方式登陆 自定义认证规则反爬 admin密文显示

    一 .认证方法比较 1.认证规则图 django 前后端不分离 csrf认证 drf 前后端分离 禁用csrf 2. 认证规则演变图 数据库session认证:低效 缓存认证:高效 jwt认证:高效 ...

  3. 基于SpringSecurity的@PreAuthorize实现自定义权限校验方法

    一.前言 在我们一般的web系统中必不可少的就是权限的配置,也有经典的RBAC权限模型,是基于角色的权限控制.这是目前最常被开发者使用也是相对易用.通用权限模型.当然SpringSecurity已经实 ...

  4. 案例17-validate自定义校验规则校验验证码是否输入正确

    1 自定义校验规则代码 <script type="text/javascript"> //使用validate插件进行表单的校验 $(function(){ $(&q ...

  5. Spring_数据校验和自定义检验规则和分组校验

    @Validated  :绑定需要校验的数据. 数据校验规则:为数据绑定校验的规则 private Long booId;@NotNull(message = "不能为空")pri ...

  6. Apache Shiro安全(权限框架)学习笔记二

    课程目标 通过学习本课程掌握权限管理的设计思想及方法,使用Shiro框架完成权限管理功能开发. 1.  理解基于资源的权限管理方法. 2.  掌握权限管理的数据模型. 3.  掌握不使用shiro开发 ...

  7. Apache Shiro安全(权限框架)学习笔记一

    1. 授权需要继承 AuthorizingRealm 类, 并实现其 doGetAuthorizationInfo 方法 2. AuthorizingRealm 类继承自 Authenticating ...

  8. DRF认证、自定义认证和权限、自定义权限

    源码分析 """ 1)APIView的dispath(self, request, *args, **kwargs) 2)dispath方法内 self.initial( ...

  9. shiro:自定义remle(二)

    SpringMVC+SpringMVC+Mybatis项目 1:导入相关依赖 <dependencies> <!--测试依赖--> <dependency> < ...

随机推荐

  1. srt字幕翻译

    需要把字幕名改成i.txt 有有道和谷歌 代码: #Author:Chenglong Qian #Copyright :Chenglong Qian import json import reques ...

  2. 即时通信WebSocket 和Socket.IO

    WebSocket HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯. 在2008年诞生,2011年成为国际标准. 现在基本所有浏览器都已经支持了. We ...

  3. 基于tcp协议的套接字通信:远程执行命令

    要解决粘包问题: TCP:流式协议 特点: 1.数据流没有开头也没有结果,像水流一样 2.TCP协议有一个nagle算法, nagle算法会将数据量较小,并且时间间隔较短的数据合成一条数据发送, 这么 ...

  4. 解决Oracle在命令行下无法使用del等键问题

    前言: Oracle使用Linux命令行进行编辑? 有PL/SQL development,SQL development等工具,为何用Linux命令行? 但也免不了有用的的时候 以下是解决在Linu ...

  5. Inno Setup: Ask for reboot after uninstall

     https://stackoverflow.com/questions/36497580/inno-setup-ask-for-reboot-after-uninstall   Use Uninst ...

  6. Android 项目 Android 学习手册(一)

    前言: 当每次查询android 知识的时候,内心是凌乱的,总觉得要是有一个工具多好, 尤其在手机端如何可以查询的话,会非常完美,能大大减少选择查询的时间, 之前见了很多java 学习手册,把一些重要 ...

  7. 2019.06.18训练日记(赞FLS)

    之前打了几场比赛,有很多题没做出来,这些题无论是知识点不会,还是说在当时时间和思路的影响下没有做出来,这都应该做出来,至少现在必须做出来,本来打算专心复习,分数高了,好保研,但是想了想如果局限于只把学 ...

  8. 图论--2-SAT--Tarjan连通分量+拓扑排序O(N+M)模板

    #include <cstdio> #include <cstring> #include <queue> #include <vector> #inc ...

  9. 图论--网络流--费用流POJ 2195 Going Home

    Description On a grid map there are n little men and n houses. In each unit time, every little man c ...

  10. Codeforce 239 B. Easy Tape Programming

    There is a programming language in which every program is a non-empty sequence of "<" a ...