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> < ...
随机推荐
- windows下部署.netcore+docker系列四 (部署程序,重点就要来了)
前面的都是为这章做准备,加油把骚年们 PS:C# 项目可以按照流程一步步来,java 偶然其他的可以找下其他的网上资源 1.在 VS2019中 添加docker 支持 (其实也就是追加一个Docker ...
- 牛客网机试题-求root(N,k)
题目描述 N<k时,root(N,k) = N,否则,root(N,k) = root(N',k).N'为N的k进制表示的各位数字之和.输入x,y,k,输出root(x^y,k)的值 ( ...
- (一)PL/SQL简介
PL/SQL PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/SQL是Oracle数据库对SQL语句的扩展.在普通SQL语句的使用上增加了编 ...
- Linux磁盘修复命令----fsck
使用fsck命令修复磁盘时 一定要进入单用户模式去修复 语 法fsck.ext4[必要参数][选择参数][设备代号] 功 能fsck.ext4 命令: 针对ext4型文件系统进行检测 参数 -a 非 ...
- hexo-themes-setting
hexo-themes-setting hexotheme Hexo 主题配置管理 一半有几种方式, 可以删除git 单独维护 也可以使用 hexo 推荐的方式进行维护 所有需要写在主题配置文件中的配 ...
- 如何在Spring boot中修改默认端口
文章目录 介绍 使用Property文件 在程序中指定 使用命令行参数 值生效的顺序 如何在Spring boot中修改默认端口 介绍 Spring boot为应用程序提供了很多属性的默认值.但是有时 ...
- QQ网站的源代码
链接:https://pan.baidu.com/s/1mqetTbauKTI0KJOaU8wW5A 提取码请加QQ:2669803073获取 声明:仅供学习,切勿用于其他用途
- windows服务程序的编写
服务编写https://blog.csdn.net/lanuage/article/details/77937407 #include <windows.h> #include <s ...
- 【React踩坑记三】React项目报错Can't perform a React state update on an unmounted component
意思为:我们不能在组件销毁后设置state,防止出现内存泄漏的情况 分析出现问题的原因: 我这里在组件加载完成的钩子函数里调用了一个EventBus的异步方法,如果监听到异步方法,则会更新state中 ...
- Java 数组 之 二维数组
转载于 : http://www.verejava.com/?id=16992693216433 public class BinaryArray { public static void main( ...