Shiro权限验证代码记录,正确找到shiro框架在什么地方做了权限识别

权限验证方式的验证代码:

org.apache.shiro.web.servlet.AdviceFilter这个类是所有shiro框架提供的默认权限验证实例类的父类

验证代码:

public void doFilterInternal(ServletRequest request, ServletResponse response, FilterChain chain)
  throws ServletException, IOException {

  Exception exception = null;

  try {

    //下面的这一段代码就是在进行权限验证

    boolean continueChain = preHandle(request, response);
    if (log.isTraceEnabled()) {
      log.trace("Invoked preHandle method. Continuing chain?: [" + continueChain + "]");
    }

    //验证通过那么就跳转到下一个过滤器

    if (continueChain) {
      executeChain(request, response, chain);
    }

    postHandle(request, response);
    if (log.isTraceEnabled()) {
      log.trace("Successfully invoked postHandle method");
    }

  } catch (Exception e) {
    exception = e;
  } finally {
    cleanup(request, response, exception);
  }
}

默认的权限验证类别有:

anon -- org.apache.shiro.web.filter.authc.AnonymousFilter
authc -- org.apache.shiro.web.filter.authc.FormAuthenticationFilter
authcBasic -- org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter
perms -- org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter
port -- org.apache.shiro.web.filter.authz.PortFilter
rest -- org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter
roles -- org.apache.shiro.web.filter.authz.RolesAuthorizationFilter
ssl -- org.apache.shiro.web.filter.authz.SslFilter
user -- org.apache.shiro.web.filter.authc.UserFilter
logout -- org.apache.shiro.web.filter.authc.LogoutFilter
anon:例子/admins/**=anon 没有参数,表示可以匿名使用。
authc:例如/admins/user/**=authc表示需要认证(登录)才能使用,没有参数
roles:例子/admins/user/**=roles[admin],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,当有多个参数时,例如admins/user/**=roles["admin,guest"],每个参数通过才算通过,相当于hasAllRoles()方法。
perms:例子/admins/user/**=perms[user:add:*],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,例如/admins/user/**=perms["user:add:*,user:modify:*"],当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法。
rest:例子/admins/user/**=rest[user],根据请求的方法,相当于/admins/user/**=perms[user:method] ,其中method为post,get,delete等。
port:例子/admins/user/**=port[8081],当请求的url的端口不是8081是跳转到schemal://serverName:8081?queryString,其中schmal是协议http或https等,serverName是你访问的host,8081是url配置里port的端口,queryString是你访问的url里的?后面的参数。
authcBasic:例如/admins/user/**=authcBasic没有参数表示httpBasic认证
ssl:例子/admins/user/**=ssl没有参数,表示安全的url请求,协议为https
user:例如/admins/user/**=user没有参数表示必须存在用户,当登入操作时不做检查
 
时间: 2024-12-26 20:25:58

Shiro权限验证代码记录,正确找到shiro框架在什么地方做了权限识别的相关文章

ASP.NET MVC View 和 Web API 的基本权限验证

ASP.NET MVC 5.0已经发布一段时间了,适应了一段时间,准备把原来的MVC项目重构了一遍,先把基本权限验证这块记录一下. 环境:Windows 7 Professional SP1 + Microsoft Visual Studio 2013(MVC 5 + Web API 2) 修改Web.config,增加Forms验证模式,在system.web节点中增加以下配置: <authentication mode="Forms"> <forms loginU

MongoDB 权限 验证

在MongoDB中,服务启动默认是没有权限验证的,就安全性方面来说,这肯定是不行的,所以需要加上权限验证. 既然是要进行权限验证,那肯定是得有用户的吧,所以权限验证的第一步就是给MongoDB库添加用户. 启动MongoDB服务端,然后启动MongoDB客户端,在客户端使用命令给MongoDB库添加用户,看代码: [sql] view plaincopy > db.addUser("sa","123"); { "user" : "

Shiro权限验证详细教程

一.Shiro介绍 1.可从本教程中明白以下几个知识点: 认识Shiro的整体架构和各组件的概念: Shiro认证.授权过程: Shiro自定义Realm. 2.Shiro简介 Shiro是Apache强大灵活的开源的安全框架,有认证.授权.企业会话管理.安全加密.缓存管理等功能. Shiro和Spring Security相比较:Shiro更加简单方便.并且可脱离Spring,Spring Security比较笨重复杂,不可脱离Spring. 3.Shiro架构图 详细图如上面所示:在这里就不

Spring MVC + Shiro 实现权限验证

MAVEN的pom.xml 引入shiro(Spring MVC+mybatis 请参见上一章). <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.2.5</version> </dependency> <!-- http://mvnrepository.co

SpringMVC+Apache Shiro+JPA(hibernate)案例教学(二)基于SpringMVC+Shiro的用户登录权限验证

序: 在上一篇中,咱们已经对于项目已经做了基本的配置,这一篇文章开始学习Shiro如何对登录进行验证. 教学: 一.Shiro配置的简要说明. 有心人可能注意到了,在上一章的applicationContext.xml配置文件中,包含以下配置. <!-- 項目自定义的Realm --> <bean id="shiroDbRealm" class="org.shiro.demo.service.realm.ShiroDbRealm" ><

简单两步快速实现shiro的配置和使用,包含登录验证、角色验证、权限验证以及shiro登录注销流程(基于spring的方式,使用maven构建)

前言: shiro因为其简单.可靠.实现方便而成为现在最常用的安全框架,那么这篇文章除了会用简洁明了的方式讲一下基于spring的shiro详细配置和登录注销功能使用之外,也会根据惯例在文章最后总结一下shiro的大致配置使用流程,希望本篇文章能够后能给大家一种原来shiro这么简单的错觉感觉. 注意:该篇文章的开始是建立在一个完备的spring+mybatis的开发环境中,除了shiro之外的配置基本不会涉及到.做好自己--eguid原创文章 一.依赖的jar包 本篇文章使用shiro-1.4

shiro 权限验证 AuthorizingRealm doGetAuthorizationInfo

先放代码: https://git.oschina.net/alexgaoyh/alexgaoyh.git 今天在敲代码的过程中,突然发现之前整合的shiro权限框架有问题,doGetAuthorizationInfo() 方法一直没有被调用,后来发现, 1:  doGetAuthorizationInfo()方法可以理解为是权限验证, 2: doGetAuthenticationInfo(  AuthenticationToken token)  理解为登陆验证. 两者是不一样的: 登陆验证:

dubbo和shiro的整合,在服务端做权限验证

基于dobbo做服务开发后通常会遇上这样一些问题,举个例子:用户的笔记,涉及到CRUD 4个接口,是每一个接口中都要把用户传进去么?比如:删除接口定义为 noteService.deleteById(Long noteId)还是 noteService.deleteById(Long userId, Long noteId)如果是前者,这个时候如果不验证用户对资源是否有权限直接删除是否合理,尤其是这种可能被用户猜到的ID很容易被恶意调用.如果选第二种的话,那么有很多接口都要这样定义,感觉不够美观

简单扩展shiro 实现NOT、AND、OR权限验证(支持复杂一点的表达式)

简单扩展Shiro实现  类似organization:create OR organization:update OR organization:delete ( organization:create Or organization:update ) OR  NOT organization:delete ( organization:create && organization:update ) OR  ! organization:delete 其中操作符不限大小写,支持and.o