shiro 登录不执行授权回调方法doGetAuthorizationInfo

emqx Java 订阅以及发送 结合若依框架 阅读详情

转载自:http://blog.youkuaiyun.com/qq_31759675/article/details/72268141


这是
什么
鬼!
登录页面跳转业务处理



SpringMVC控制器




Shiro配置文件

[html]  view plain  copy
  1. <beans xmlns="http://www.springframework.org/schema/beans"  
  2.     xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"  
  3.     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
  6.     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  
  7.     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd  
  8.     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">  
  9.   
  10.     <!-- 1. 配置 SecurityManager! -->  
  11.     <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">  
  12.         <property name="cacheManager" ref="cacheManager" />  
  13.         <property name="authenticator" ref="authenticator" />  
  14.           
  15.         <property name="realms">  
  16.             <list>  
  17.                 <ref bean="jdbcRealm"/>  
  18.                 <!-- <ref bean="shiroRealm"/> -->  
  19.             </list>  
  20.         </property>  
  21.           
  22.         <!-- 设置登录时长 半天12个小时、-->  
  23.         <property name="rememberMeManager.cookie.maxAge" value="43200"></property>  
  24.     </bean>  
  25.   
  26.     <!-- 2. 配置 CacheManager. -->  
  27.     <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">  
  28.         <property name="cacheManagerConfigFile" value="classpath:shiro/ehcache.xml" />  
  29.     </bean>  
  30.       
  31.     <bean id="authenticator" class="org.apache.shiro.authc.pam.ModularRealmAuthenticator">  
  32.         <property name="authenticationStrategy">  
  33.             <bean class="org.apache.shiro.authc.pam.AtLeastOneSuccessfulStrategy"></bean>  
  34.         </property>  
  35.     </bean>  
  36.   
  37.     <!-- 3. 配置 多Realm验证:MD5 SHA1... 3.1 直接配置实现了 org.apache.shiro.realm.Realm 接口的 bean -->  
  38.     <bean id="jdbcRealm" class="com.vnasi.realms.ShiroRealm">  
  39.         <property name="credentialsMatcher">  
  40.             <bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">  
  41.                 <property name="hashAlgorithmName" value="MD5" />  
  42.                 <property name="hashIterations" value="1024" />  
  43.             </bean>  
  44.         </property>  
  45.     </bean>  
  46.     <!-- 暂时没用上 -->  
  47.     <!-- <bean id="shiroRealm" class="com.vnasi.realms.SecondRealm">  
  48.         <property name="credentialsMatcher">  
  49.             <bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">  
  50.                 <property name="hashAlgorithmName" value="SHA1" />  
  51.                 <property name="hashIterations" value="1024" />  
  52.             </bean>  
  53.         </property>  
  54.     </bean> -->  
  55.   
  56.     <!-- 4. 配置 LifecycleBeanPostProcessor. 可以自定的来调用配置在 Spring IOC 容器中 shiro bean 的生命周期方法. -->  
  57.     <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />  
  58.   
  59.     <!-- 5. 启用 IOC 容器中使用 shiro 的注解. 但必须在配置了 LifecycleBeanPostProcessor 之后才可以使用. -->  
  60.     <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor" />  
  61.     <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">  
  62.         <property name="securityManager" ref="securityManager" />  
  63.     </bean>  
  64.   
  65.     <!-- 6. 配置 ShiroFilter. -->  
  66.      <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">  
  67.         <property name="securityManager" ref="securityManager"/>  
  68.         <!-- <property name="loginUrl" value="/path/toLogin"/>  
  69.         <property name="successUrl" value="/foreground/index"/> -->  
  70.         <property name="unauthorizedUrl" value="/path/toUnAuthorized"/>  
  71.                 
  72.         <!-- 静态资源map -->  
  73.         <property name="filterChainDefinitionMap" ref="filterChainDefinitionMap" />  
  74.     </bean>  
  75.       
  76.     <!-- 采用从数据表中初始化静态资源map  配置一个 bean, 该 bean 实际上是一个 Map. 通过实例工厂方法的方式-->  
  77.     <bean id="filterChainDefinitionMap" factory-bean="filterChainDefinitionMapBuilder" factory-method="buildFilterChainDefinitionMap"></bean>  
  78.     <bean id="filterChainDefinitionMapBuilder" class="com.vnasi.factory.FilterChainDefinitionMapBuilder"/>  
  79.   
  80. </beans>  

静态资源map,就是shiro配置文件中的filterChainDefinitions内容动态模拟出来,实际查数据库



自定义ShiroRealm 继承AuthorizingRealm 实现授权和信息认证

[html]  view plain  copy
  1. <span style="font-size:18px;">public class ShiroRealm extends AuthorizingRealm {  
  2.   
  3.     @Autowired  
  4.     private UserService service;  
  5.   
  6.     // 认证回调函数  
  7.         @Override  
  8.         protected AuthenticationInfo doGetAuthenticationInfo(  
  9.                 AuthenticationToken token) throws AuthenticationException {  
  10.             //1.将AuthenticationToken强制转换为UsernamePasswordToken从而得到userName  
  11.             UsernamePasswordToken upToken = (UsernamePasswordToken)token;  
  12.               
  13.             //2.根据转换过来的UsernamePasswordToken对象得到userName  
  14.             String username = upToken.getUsername();  
  15.               
  16.             //3.根据userName从数据库查出来的对应的记录  
  17.             VnasiUser user = service.findUserByUserName(username);  
  18.             Object principal = user.getUserId();              
  19.             Object credentials = user.getPassword();  
  20.               
  21.             //4.当用户不存在时  
  22.             if(!principal.equals(username)){  
  23.                 throw new UnknownAccountException("该用户不存在!");  
  24.             }  
  25.             //5.当用户被锁定时  
  26.             if(!principal.equals(username)){  
  27.                 throw new LockedAccountException("该用户已被锁定!");  
  28.             }  
  29.               
  30.             //MD5盐值加密后的密码  
  31.             String hashAlgorithmName = "MD5";  
  32.             Object salt = ByteSource.Util.bytes(principal);  
  33.             int hashIterations = 1024;  
  34.               
  35.             Object result = new SimpleHash(hashAlgorithmName,credentials,salt,hashIterations);  
  36.               
  37.             //credentials密码是通过用户名和密码进行盐值加密得出的  
  38.             if(principal.equals(username)){  
  39.                 credentials = result;  
  40.             }  
  41.             //6.3 盐值加密  
  42.             ByteSource credentialsSalt = ByteSource.Util.bytes(username);  
  43.               
  44.             //6.4当前 realm 对象的 name. 调用父类的 getName()   
  45.             String realm = getName();  
  46.               
  47.             //7.通过这个简单验证对象得到验证信息  
  48.             SimpleAuthenticationInfo info = null; //new SimpleAuthenticationInfo(principal, credentials, realmName);  
  49.             info = new SimpleAuthenticationInfo(principal, credentials,credentialsSalt,realm);  
  50.             return info;  
  51.         }  
  52.       
  53.     // 授权回调函数  
  54.     @Override  
  55.     protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {  
  56.         // 1. 从 PrincipalCollection 中来获取登录用户的信息  
  57.         String userName = (String) principals.getPrimaryPrincipal();  
  58.   
  59.         // 2. 利用登录的用户的信息来获取当前用户的角色或权限  
  60.         VnasiUser user = service.findUserByUserName(userName);  
  61.         // 2.1  
  62.         // 无论是普通user角色还是amdin系统角色都给上一个user(1)用户角色,要是admin就给普通用户再加上一个admin(2)角色  
  63.         Set<String> roles = new HashSet<String>();  
  64.         roles.add("user");  
  65.         if (user.getUserId().equals(userName)) {  
  66.             roles.add("admin");  
  67.         }  
  68.   
  69.         // 3. 创建 SimpleAuthorizationInfo, 并设置其 reles 属性.  
  70.         SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roles);  
  71.   
  72.         // 4. 返回 SimpleAuthorizationInfo 对象 .  
  73.         return info;  
  74.     }</span>  


以上都是大部分完整代码,跑起来也没有任何问题,shiro相关配置也是从Copy上一个项目的,上一个项目是可以顺利运行的。搞了半天测试直接访问首页的时候就是愣是直接进去了,后台代码找了又找都没找出名堂,网上也找了很多,说是在SpringMVC配置文件加上

<aop:config proxy-target-class="true" />

发现也没有什么卵用。后台实在找不出又跑去登录成功之后跳转的前台页面找找,果然,发现没有加上Shiro的标签库和权限标签

<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>

<shiro:hasRole name="user"></shiro:hasRole> 

加上就行了,记录自己的小问题,希望可以帮到一些需要的人


当AI学会自我验证:Chain-of-Verification如何杜绝错误决策? 2025年,大模型"幻觉"问题已成为企业落地AI的最大障碍之一——金融风控中1.2%的误判率可能导致千万级损失,医疗诊断中3%的错误可能危及生命,法律文书中5%的事实偏差可能引发合规风险。MetaAI与Google联合提出的**Chain-of-Verification(CoVe,验证链)**技术,让AI具备"自我审视"能力,通过结构化验证流程将幻觉率降低68%+,在复杂决策场景准确率提升至95%+。本文系统拆解CoVe的技术原理、实施路径与行业实战,为企业提供AI决策可靠性保障的完整方案。 阅读详情

相关推荐

MFC 修改CheckBox的文本颜色方法

设置主题 这一步是必须的,不可省略。 BOOL CMFCApplication1Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 // 设置主题 HWND

Kim的博客 2249

springboot shiro 不执行授权方法doGetAuthorizationInfo()

AuthorizingRealm中有两个需要被重写的方法,分别是 doGetAuthenticationInfo() //验证功能 和 doGetAuthorizationInfo() //授权功能 在login登录方法中,使用login()方法触发自定义的 myRealm.doGetAuthenticationInfo()*方法, /*登录方法*/ public void login(){ Subject subject = SecurityUtils.getSubject(); UsernamePa

m0_67392273的博客 2393

参考线平滑-FemPosDeviation-SQP

使用SQP(顺序二次规划)对离散点进行平滑

mpt0816的博客 2439

Shiro:登陆成功并未执行doGetAuthorizationInfo

package com.hk3t.core.security; import java.util.Set; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.Authentic

Sunny 2万+

Win11如何更改用户文件夹名(完整流程- 已验证可行)

把C盘所有文件备份,如果不想备份,则选择创建一个C盘的系统还原点(能在后续把C盘玩崩之后恢复原状)

Y_Aryan的博客 5万+

ISO 26262中的失效率计算:Mission profile的使用

Mission profile:任务剖面,即产品在完成规定任务这段时间内所经历的时间和环境的时序描述;集成电路在工作时环境温度是在不停变化的,同时也存在运行状态和非运行状态;为此标准提出了根据任务剖面(Mission profile)以及集成电路的实际结温来评估热幅度变化、循环温度幅值等因素的影响;汽车电子元器件相关的Mission profile参考IEC TR 62380:Table 11。

weixin_47071127的博客 4811

shiro 登录后不走doGetAuthorizationInfo方法

shiro 登录后不走doGetAuthorizationInfo方法解决办法jsp注解java测试代码shiro权限注解 在学习shiro+cas认证登录过程中,环境搭建好后发现请求的时候一直不走doGetAuthorizationInfo这个方法,其实还是配置的问的,自己没有弄懂shiro doGetAuthenticationInfo 登录认证时会进入这个方法 doGetAuthor...

宋大王的博客 1562

STM32 移植FreeModbus详细过程

modbus是一个非常好的串口协议(当然也能用在网口上),它简洁、规范、强大。可以满足大部分的工业、嵌入式需求。 这里详细说下如何将freemodbus移植到stm32平台。我之前下载的版本是1.6,我会在我的下载链接里面加上1.6的freemodbus压缩包以及我已经移植好的stm32 for freemodbus版本。我上传的移植好的绝对没问题,经过多个板子测试。这里编译器使用的是keil5.28,单片机用的是STM32F103RCT6。 移植到VET6以及ZET6的话只需要改一下选择的芯片就好,改法:

qq_40305944的博客 8万+

(五)设计模式之迭代器模式(Iterator)

前言: 参考图书:软件设计模式与体系结构 参考博客:https://www.cnblogs.com/wanson/articles/9277813.html   正题:         迭代器(iterator)有时又称游标(cursor)是程序设计的软件设计模式,可在容器(container,例如链表或阵列)上遍访的接口,设计人员无需关心容器的内容。 代码示例: 1 MyIt...

卷心菜投手 307

Flink项目基础配置指南

在大数据处理领域,Apache Flink凭借强大的实时流处理和批处理能力,成为众多开发者的首选工具。在日常工作中,开发Flink Jar任务是常见需求,但每次都需重复配置日志、梳理pom依赖、设置打包插件等,流程繁琐且易出错。为提升开发效率,减少重复劳动,将这些基础配置进行整理归纳十分必要。本文将围绕Flink项目的本地日志配置、pom依赖及插件配置展开详细介绍,为开发者提供一套可直接复用的基础配置方案,助力Flink项目高效开发。在Flink项目中,日志是了解任务运行状态、排查问题的重要依据。本地日志配

qq_42773076的博客 1210

BAQ压缩原理

BAQ——Block Adaptive Quantization,块自适应量化,一种数据压缩算法。

2872

shiro的doGetAuthorizationInfo认证不执行原因,自己写的,比其他那些复制粘贴更全

情况 1.前后端分离 2.shiro使用缓存 3.doGetAuthorizationInfo授权方法不执行 原因 1.doGetAuthorizationInfo调用必须满足条件为不在url不在shiro config里的过滤url里 2.doGetAuthorizationInfo会在校验权限或角色时进行调用 3.如果存在缓存doGetAuthorizationInfo只调用一次 解决方法 1.确保url不在shiro config的过滤url里 2.确保验证了权限,可以使用默认页面

iyangijava的博客 2365

matlab 点云可视化(1)——pcshow()函数可视化单个点云

matlab可视化单个点云常用方法汇总。

点云侠的博客 5359

shiro 登录时不执行授权回调方法doGetAuthorizationInfo

这 是 什 么 鬼 ! 登录页面跳转业务处理 SpringMVC控制器 Shiro配置文件 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schem

qq_31759675的博客 9018

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Spring Boot集成Shiro 登录后访问请求不执行Realm的授权doGetAuthorizationInfo方法

springboot集成shiro的时候在注解方法访问没有经过授权的校验:aop:config在shiro权限注解中发挥的作用 产生的原因是:授权的注解没有进行生效 需要改正: 1.注入通知器: com.sml.shiro.config.ShiroConfig /** * 注入AuthorizationAttributeSourceAdvisor 实现了Meth...

zuozhiyoulaisam的专栏 3419

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

shiro的doGetAuthorizationInfo授权方法始终进不去

感慨:大二刚开始学java,只顾埋头照着敲,什么语法什么意思通通不知道,敲完运行看看效果正确就洋洋得意一番。后来慢慢懂了基本语法,基本意思,想实现什么功能就百度一下,面向对象编程成了面向百度编程。开始了抄,第一阶段直接抄,代码实现错误就是辣鸡答案。第二阶段,看看代码的基本如何实现,对它进行一些更改达到自己的预期效果。第三阶段,抄它的思想,从它的思想中获得灵感。到了这个阶段,觉得自己好像什么都会,又...

天才战士的博客 3万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

shiro登录认证后不执行授权doGetAuthorizationInfo的解决

shiro登录认证后不执行授权doGetAuthorizationInfo的解决shiro认证和授权认证之后马上执行授权解决方案 shiro认证和授权 用户登录成功之后,完成shiro的doGetAuthenticationInfo认证,但是登录认证之后shiro并不会马上执行授权doGetAuthorizationInfo,而是待用户访问的目标资源或者方法需要权限的时候才会调用doGetAuth...

csdn565973850的博客 1万+

shiro权限认证及授权的执行流程分析及图解(一)

(配置文件请看下一个博客) https://blog.youkuaiyun.com/weixin_41716049/article/details/84336696 为了颜色标识注释,前面没有使用代码框,多多担待 《一,认证》 1.先建两个class文件 一个写AuthRealm (授权与认证方法,并继承)extends AuthorizingRealm 获取其默认方法doGetAu...

3万+

Shiro登录doGetAuthorizationInfo授权不执行

Shiro登录操作只会去执行认证操作,并不会去进行授权,只有用到权限的时候才会去执行doGetAuthorizationInfo进行授权操作,比如请求加了shiro注解的接口,这样打断点就可以拦截到了。...

料峭春风吹酒醒,微冷, 山头斜照却相迎。 回首向来萧瑟处,归去, 也无风雨也无晴! 3429

Shiro_授权doGetAuthorizationInfo

授权流程 shiro支持三种方式的授权: shiro支持三种方式的授权 代码触发 注解触发 标签触发 代码触发 简单授权实现 Shiro.ini [users] #用户root的密码是zsl,此用户具有role1和role2两个角色 root = zsl,role1,role2 #账号为root 密码是 zsl [roles] #角色role1对资源user拥有create、updat...

qq_37432174的博客 1405

Shiro授权信息刷新 | doGetAuthorizationInfo()不执行

1

qq_32352777的博客 3555

shiro中AuthorizingRealm接口的doGetAuthorizationInfo 与doGetAuthenticationInfo什么时候调用

这两个方法虽然名字很像,但是意义是不一样的,doGetAuthorizationInfo方法是进行权限验证,doGetAuthenticationInfo是进行身份验证的(登录验证),相信很多初学者对于这两个方法的调用时机可能不太明白,今天楼主搞了一下午的测试大致明白这两个方法的调用时机。1.doGetAuthorizationInfo方法    该方法主要是用于当前登录用户授权(作者小白插一句:...

sidanchen的博客 3万+

Springboot整合shiro 登录后访问请求不执行Realm的授权doGetAuthorizationInfo方法

在用springboot 整合shiro的时候,测试发现登录后访问请求不执行Realm的授权方法, 解决方案 把setRealm()放在创建SecurityManager的方法最后一行

zhousw1999的博客 7617

shiro进行登录认证和授权

1.Shiro核心架构 三个常用过滤器 anno:不需要任何权限即可访问资源 authc:需要登录的权限才可以访问资源 perms:需要指定的权限才能访问目标资源

shenhy95的博客 7100

shiro 不执行授权方法 doGetAuthorizationInfo()

[size=x-large][color=black][b]ShiroDbRealm.java 代码如下[/b][/color][/size] [code="java"]public class ShiroDbRealm extends AuthorizingRealm { @Resource private UserService userService; ...

RodJohnson_523391的专栏 837
上一篇: gradle windows下安装使用 以及 gradle项目与maven项目互转
下一篇: Apache Shiro验证: 已记住(Remembered) vs 已验证(Authenticated)
琅琊山二当家
博客等级 码龄18年 447粉丝 322原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值