Shiro不执行自定义AuthorizingRealm

干净利落直接讲主题:

简述:

技术 SpringMVC Mybatis shiro thymeleaf

登录表单 username password + verify

Post提交首先执行了自定义FormAuthenticationFilter过滤器(ps:此过滤器主要执行了验证码校验)

if (判断验证码是否相等) {
//如果校验失败则返回true 则后续不会执行身份验证
return true;
}

//重点在这里 执行了onAccessDenied之后 
return super.onAccessDenied(request, response);

项目断点查看到 package org.apache.shiro.web.servlet.AdviceFilter这个类 其中132行log.isTraceEnabled()这里这个开关为false

我就向前翻发现执行了过滤前的preHandle

protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception {

        if (this.appliedPaths == null || this.appliedPaths.isEmpty()) {
            if (log.isTraceEnabled()) {
                log.trace("appliedPaths property is null or empty.  This Filter will passthrough immediately.");
            }
            return true;
        }

        for (String path : this.appliedPaths.keySet()) {
            if (pathsMatch(path, request)) {
                log.trace("Current requestURI matches pattern ‘{}‘.  Determining filter chain execution...", path);
                //加载了映射 见下图          Object config = this.appliedPaths.get(path);
                return isFilterChainContinued(request, response, path, config);
            }
        }

        return true;
    }


authcappliedPaths将我们的配置filterChainDefinitions过滤链变成了Map。其中shiroFilter中的loginUrl

例:<property name="loginUrl" value="/login.htm" />也会加载到authcappliedPaths中

所以我便开始查看我的配置文件 在shiroFilter中找到我的这个loginUrl

发现其不正确改成我的controller的requestMapper请求映射后正常执行自定义Realm

发现是这个原因场面一度十分尴尬。希望对大家有所帮助。如果写的有什么不正确的请大家指导一下.

下面是我看过的源码解析和官方API方法摘要

参考博客:http://www.aichengxu.com/other/10985615.htm

官方API:http://shiro.apache.org/static/1.3.2/apidocs/org/apache/shiro/subject/Subject.html

时间: 2024-10-20 03:37:17

Shiro不执行自定义AuthorizingRealm的相关文章

shiro授权及自定义realm授权(七)

1.授权流程 2.    三种授权方法 Shiro 支持三种方式的授权: 编程式:通过写if/else 授权代码块完成: Subject subject = SecurityUtils.getSubject(); if(subject.hasRole("admin")) { //有权限 } else { //无权限 } 注解式:通过在执行的Java方法上放置相应的注解完成: @RequiresRoles("admin") public void hello() {

django不定义model,直接执行自定义SQL

如果不想定义model,直接执行自定义SQL,可如下操作: 1. 通过 connections获取db连接,如果是多个数据库,connections['dbName'] 来选择 2. 获取游标 cursor 3. 执行sql: cursor.execute(sql) 4.获取返回结果:fetchone,fetchall (fetchall返回的是元祖,非字典) from django.db import connections cursor = connections['test_db'].cu

Python Django 之 直接执行自定义SQL语句(一)

一.执行自定义SQL方法 1.Executing custom SQL directly 直接执行自定义SQL,这种方式可以完全避免数据模型,而是直接执行原始的SQL语句. 2.Manager.raw() 执行原始查询并返回模型实例 二.Executing custom SQL directly Manager.raw() 远远不够,可直接执行自定义SQL,directly execute UPDATE , INSERT , or DELETE queries.django.db.connect

【Shiro】Apache Shiro架构之自定义realm

之前写的博客里都是使用.ini文件来获取信息的,包括用户信息,角色信息,权限信息等.进入系统时,都是从.ini文件这读取进入的.实际中除非这个系统特别特别简单,否则一般都不是这样干的,这些信息都是需要在数据库中进行维护的,所以就需要用到自定义realm了. 写在前面:这篇博文是基于上一篇Shiro集成web基础之上修改的. 1. 数据库建表 首先在数据库中新建三个表:t_user,t_role和t_permission,分别存储用户信息,角色信息和权限信息,建表语句如下: CREATE TABL

angular指令监听ng-repeat渲染完成后执行自定义事件方法

今天工作中遇到需要用到ng-repeat遍历渲染完后执行某个操作,angular本身并没有提供监听ng-repeat渲染完成的指令,所以需要自己创建自定义指令. 在ng-repeat模板实例内部会暴露出一些特殊属性$index/$first/$middle/$last/$odd/$even,$index会随着每次遍历(从0开始)递增,当遍历到最后一个时,$last的值为true,所以可以通过判断$last的值来监听ng-repeat的执行状态, 怎么在遍历过程中拿到$last的值:自定义指令 v

MVC 用扩展方法执行自定义视图,替代 UIHint

项目中用了 Bootstrap , 这样就不用写太多的CSS了,省去很多事情.但是这个业务系统需要输入的地方很多,每个表都有100多个字段,每个页面需要大量的表单.把这些表单按 bootstrap 的格式写出来,也是件头痛的事情.我想到模板,EditorTemplates UIHint, 但是 UIHint 需要用 Metadata 标注,一个一个的加,也是不现实的.还有别外一种办法,就是扩展 HtmlHelper.要用HtmlHelper ,大家可能就想到了 TagBuilder 了,TagB

shiro笔记-AuthenticatingRealm和AuthorizingRealm关系

AuthenticatingRealm-------->用于认证方法的Realm AuthorizingRealm--------->用于授权和认证的realm一般使用这个 AuthorizingRealm继承于AuthenticatingRealm但是没有实现父类的doGetAuthenticationInfo方法

登录Windows界面前执行自定义脚本

通常情况下,进入Windows界面之前都有一个登录过程,如何在登录前让系统执行脚本呢?下面介绍一种方法. 1.打开组策略,在Run(运行)中输入GREDIT.MSC,点击确认. 2.依次点击Computer Configuration -> Windows Settings -> Scripts(Startup/Shutdown) 3.在右侧双击Stratup,出现如图弹窗,可在此添加cmd或者PowerShell脚本. 4.点击确认 重启,在下次登录Windows界面前,系统会自动执行所添加

如何在工作流程中执行自定义代码--- UiPath

UiPath Studio附带了多个活动包,涵盖了开发实现复杂业务流程的工作流所需的所有最常用操作.但有时您需要插入自己的代码或定义.NET Framework中不可用的自定义类型.本文的范围是展示如何在UiPath Studio中实现这一目标. 因此,假设您已创建自己的程序集,其中包含一个名为GenericException的对象,该对象定义了自定义异常类型,并且您希望在工作流中使用它. 为此,您需要创建一个包含程序集及其所有依赖项的NuGet包,然后将其插入UiPath Studio.创建N