springboot+shiro入门学习(三)setUnauthorizedUrl的设置

SpringBoot整合Shiro实现安全认证与权限控制 在Java企业级开发中,安全认证是系统架构的核心组件。Apache Shiro作为轻量级安全框架,通过Subject、SecurityManager和Realm三大核心组件,提供了简洁而强大的认证授权解决方案。相比Spring Security的复杂配置,Shiro以其'简单至上'的设计哲学显著降低了学习曲线。技术实现上,Shiro支持基于角色的访问控制(RBAC)和权限字符串的细粒度控制,通过哈希加密算法保障密码安全,并可与Redis等缓存技术集成提升性能。典型应用场景包括电商系统的用户权限管理、金融平台 阅读详情

在上一篇中我们遗留了一个问题就是当没有权限时页面跳转的问题。

首先搭建一个jsp的环境

pom文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.shiro</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>shiro</name>
    <packaging>war</packaging>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>1.4.0</version>
        </dependency>

        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>


        <!-- spring boot tomcat jsp 支持开启 -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
        <!--servlet支持开启-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </dependency>
        <!-- jstl 支持开启 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

applocation.yml文件:

server:
  port: 8202
spring:
  mvc:
    view:
      prefix: /WEB-INF/jsp/
      suffix: .jsp

访问jsp的Controller:

package com.shiro.Controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping(value = "jsp")
public class JspController {

    @RequestMapping(value = "test")
    public String aaa(){
        System.out.println("111111111111111111111");
        return "index";
    }
}

项目结构:

 首先测试一下http://localhost:8202/jsp/test能不能正常访问。如果能进行下面的步骤。

修改ShiroConfig类的shiroFilter方法:

我们新增了
shiroFilterFactoryBean.setUnauthorizedUrl("/jsp/test");

filterChainDefinitionMap.put("/test/admin","perms[user:view]");

@Bean
    public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager){
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();

        //设置安全管理器
        shiroFilterFactoryBean.setSecurityManager(securityManager);
        //shiroFilterFactoryBean.setLoginUrl("/index");
        shiroFilterFactoryBean.setUnauthorizedUrl("/jsp/test");

        //自定义过滤器
        Map<String, Filter> filterMap = new LinkedHashMap<>();
        filterMap.put("filter",new ShiroFilter());
        shiroFilterFactoryBean.setFilters(filterMap);

        //权限控制map
        Map<String,String> filterChainDefinitionMap = new LinkedHashMap<>();
        // 配置不会被拦截的链接 顺序判断
        filterChainDefinitionMap.put("/static/**", "anon");
        //配置退出 过滤器,其中的具体的退出代码Shiro已经替我们实现了
        filterChainDefinitionMap.put("/logout", "logout");
        filterChainDefinitionMap.put("/test/login","anon");
        filterChainDefinitionMap.put("/test/admin","perms[user:view]");
        //filterChainDefinitionMap.put("/test","authc");
        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
        return shiroFilterFactoryBean;
    }

同时将admin方法上面的@RequiresPermissions({"user:delete","user:update"})注释掉。

需要注意的是测试的时候一定要先执行login方法。

当前用户拥有的权限是:user:delete。所以访问时没有权限。即跳转到/jsp/test路径

继续修改代码:

将filterChainDefinitionMap.put("/test/admin","perms[user:view]");注释掉。同时在admin方法中添加@RequiresPermissions({"user:delete","user:update"})

会发现并没有跳转到/jsp/test路径去。具体原因访问https://blog.youkuaiyun.com/bicheng4769/article/details/86680955

新增一个MyControllerAdvice类来处理全局异常。

package com.shiro.MyException;

import org.apache.shiro.authz.UnauthorizedException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice
public class MyControllerAdvice {

    @ExceptionHandler(value = UnauthorizedException.class)
    public String aa(){
        return "index";
    }
}

我们再次访问test/admin方法。会发现能够跳转到/jsp/test路径去了。

setUnauthorizedUrl不起作用 setUnauthorizedUrl("/403")不起作用 SpringBoot中集成Shiro的时候, 配置setUnauthorizedUrl("/403")了,但是不起作用,只会在控制台打印UnauthorizedException异常信息: 原因: Shiro源码中是这样做的: private void applyUnauthorizedUrlIfNecessary(Filter filter) { String unauthorizedUrl =... 阅读详情

相关推荐

实验六 有源滤波器

实验六 有源滤波器一、实验目的二、仪器及设备三、预习要求画出三个电路的幅频特性曲线。四、实验内容l.低通滤波电路2.高通滤波电路3.带阻滤波电路(1)实测电路中心频率。(2)以实测中心频率为中心,测出电路幅频特性。五、实验报告六,仿真图:图 1 低通滤波器仿真图图 2 高通滤波器仿真图图 3 带阻滤波电路仿真图 一、实验目的 1.熟悉有源滤波电路构成及其特性。 2.学会测量有源滤波电路幅频特性。 二、仪器及设备 1.示波器 2.信号发生器 三、预习要求 1.预习教材有关滤波电路

胡毛毛的博客 1万+

Shiro页面权限拦截

@Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); Users users=UserUtil.getUser(); String userType=users.getUserType(); authoriz

qq_36008278的博客 2956

黑金ZYNQ7010开发板开箱实测:从接线到串口通信的保姆级指南

本文提供黑金ZYNQ7010开发板从开箱到串口通信的完整实操指南。详细介绍了硬件连接、驱动安装、启动模式设置及串口终端配置等关键步骤,并针对常见问题提供排查思路,帮助FPGA开发者快速上手ZYNQ平台,建立稳定的调试通道。

weixin_29266749的博客 466

setUnauthorizedUrl("")不起作用,不能设置没有权限的跳转页面

SpringBoot中集成Shiro的时候, 配置setUnauthorizedUrl("")了,但是不起作用,只会在控制台打印UnauthorizedException异常信息: 原因: Shiro源码中是这样做的: private void applyUnauthorizedUrlIfNecessary(Filter filter) { String unauthorized...

二十一克阳光!的博客 912

ROS下UR+Realsense相机进行手眼标定

手眼标定主要是用来确定相机坐标系和机械臂坐标系之间的转换关系,从而实现后续的抓取等任务。

weixin_42157689的博客 7569

SQLite性能优化:从WAL模式到内存映射的深度解析

本文深入解析SQLite性能优化策略,重点介绍WAL模式和内存映射技术的应用。通过合理配置WAL日志、同步策略和事务批处理,SQLite的IO吞吐量可提升3-5倍。结合内存映射和缓存优化,性能可进一步提升至默认配置的50倍,适用于高并发读写场景。

weixin_29231027的博客 455

Shiro系列(六)--- 完善登录认证、授权细节及解决setLoginUrl、setUnauthorizedUrl失效问题

继续我们shiro系列博客相关的学习笔记,完善一下登录认证和授权流程的一些细节,各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢! 首先完善一下登录的流程,使其更接近于实际的应用场景,我们在Shiro系列(四)--- Springboot整合Shiro实现基本的登录认证流程中描述了登录认证的基本流程,并且最后我们测试的时候通过访问http://localhost:8080/login进入到登录页面,然后输入用户名密码进行登录验证。 貌似也没有什么问题..

FAIRYTAIL的博客 2282

ROS智能车定位导航仿真+功能包自带的地图实现+自己建立的地图实现

ROS智能车定位导航仿真一、前言二、效果图三、准备工作[1.在Ubuntu上安装ROS Kinetic](https://blog.youkuaiyun.com/qq_42585108/article/details/104327661)2.创建ROS工作区间①1创建racecar_ws和src文件夹②初始化工作空间③下载racecar源代码包,并编译工程四、启动仿真1.设置环境变量2.启动地图五、建图1.启动slam和rviz2 控制车辆(左侧有个控制窗口),WASD控制前左后右的运动就可以建图了:3.新建终端保存地

qq_42585108的博客 1万+

Shiro中setUnauthorizedUrl("/403")不生效,无法跳转指定页面的解决办法。

Shiro中setUnauthorizedUrl"/403"不生效,无法跳转指定页面的解决办法问题描述问题分析解决办法 问题描述 ShiroConfig中设置未授权页面统一跳转403页面,但是没有权限的用户访问时,并未跳转指定页面,页面报错信息如下: 控制台报错如下: 问题分析 这是因为shiro源代码中判断了filter是否为AuthorizationFilter,只有perms,roles...

banmajio的博客 1731

笔试题-2023-星宸-数字IC设计【纯净题目版】

4 笔试题-2023-星宸-数字IC设计【纯净题目版】

w0shishabi的博客 1171

【OpenClaw从入门到精通】第63篇:A股智能分析实战——用OpenClaw搭建个人量化研究助手(2026实测版)

2026年,OpenClaw已成为量化投研圈的现象级工具,八家头部券商密集发布专题研报力证其价值。传统量化投研面临技术门槛高、重复劳动多、策略迭代慢、非结构化数据处理弱四大痛点,而OpenClaw通过“AI智能体+金融Skill+量化API”的融合,实现了从数据获取、策略生成、回测验证到持仓监控的全流程自动化。本文基于2026年最新实测经验,完整呈现个人量化研究助手搭建:从阿里云部署、阿里云百炼API配置(含解析失败解决方案)、Tushare数据源接入,到PB-ROE价值选股、研报复现、自动化回测、持仓监控

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1058

Shiro集成springboot的一些配置和问题:setUnauthorizedUrl不起作用

Shiro集成springboot的一些配置和问题

化身强盗的博客 754

基于Qt C++开发一个体测数据管理系统

advice.dietAdvice = "饮食建议:\n1. 控制总热量摄入,每天减少300-500大卡\n2. 减少精制碳水(白米饭、白面包、甜食)\n3. 增加优质蛋白和膳食纤维摄入\n4. 烹饪方式以蒸、煮、烤、凉拌为主,减少油炸\n5. 晚餐适量减少,睡前3小时避免进食";dataTable->setHorizontalHeaderLabels({"ID", "用户名", "身高(cm)", "体重(kg)", "BMI", "体脂率(%)", "记录时间"});

寒寒豆豆软件公司的博客 192

Springboot+Shiro配置setUnauthorizedUrl()不生效

问题背景分析解决方法一方法二方法三 问题背景 1.使用Shiro对用户访问资源进行权限校验(授权)。 2.目的:当用户访问没有权限资源时,跳转到指定页面。 3.setUnauthorizedUrl("/view/permission")方法作用:当用户没有权限访问时跳转到"/view/permission"页面。 4.但是setUnauthorizedUrl配置没有生效。 @Bean //此对象中要配置一些访问规则(匿名访问的资源,认证的访问的资源) public ShiroFilterF.

weixin_45864962的博客 1195

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

shiro中setUnauthorizedUrl("/403")不起作用

最近学习shiro框架,在用户没有权限的情况下想让其跳转到403页面,结果非自己预想的效果。后来找到一个解决办法如下: 转载来源 SpringBoot中集成Shiro的时候, 配置setUnauthorizedUrl("/403")了,但是不起作用,只会在控制台打印UnauthorizedException异常信息: 原因: Shiro源码中是这样做的:  ...

weixin_30432007的博客 414

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【SpringBoot框架篇】15.使用shiro对web应用进行权限认证

使用shiro对web应用进行权限认证

皓亮君的博客 3060

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

springboot+shiro自定义请求超时返回json或其他对象,不通过shiro的setUnauthorizedUrl

前后端分离的项目导致了页面的路由是由前端来配置的,不通过shiro来跳转页面。这时候需要给前端返回一个自定义的返回体,来告知前端已经超时或者是没权限。具体步骤如下: 1.自定义一个filter,继承FormAuthenticationFilter,并实现onAccessDenied方法,这个方法就是来实现请求被拒绝的处理的。 import java.io.PrintWriter; import javax.servlet.ServletRequest; import javax.servlet.Se

张步云的专栏 746

Prometheus性能优化:从定位瓶颈到落地调优的完整路径

监控大盘原先 200ms 就能返回,扩容之后开始 8s 出不来。值班同学先怀疑网络,打开 /metrics 才发现查询 p99 三天涨了 40 倍。与此同时,TSDB 目录一天膨胀 50GB,scrape 超时告警从早刷到晚。面对这种劣化,做 Prometheus 性能优化时最常见的错误反应就是满仓库找参数改。实际上,瓶颈永远卡在采集、存储、查询三层中的某一层,先定位到层,再转对应的旋钮,否则只是

gitblog_00518的博客 1001

Springboot整合Shiro中setUnauthorizedUrl无效的解决方法

写一个配置类如下 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;...

Vamps 1014

spring boot 整合 shiro bean.setUnauthorizedUrl("/auth/unauthorized.do"); 无效

spring boot 整合 shiro setUnauthorizedUrl这个方法设置的url 反复测试无效,如果在ShiroConfiguration配置文件中这么配置权限filterChainDefinitionMap.put("/role/roleList.do", "perms[role:roleList]");的话,无权限就会跳转到对应的url“/auth/unauthorized....

liuzhen_333的专栏 2828

SpringBoot2.0集成Shiro

SpringBoot2.0集成Shiro shiro无权限,不跳转到指定页面。setUnauthorizedUrl无效

weixin_45370608的博客 270

springboot+shiro+jwt实现登录+权限验证

一、简介: JWT优点: 1.基于Token的身份认证是无状态的,服务器或者Session中不会存储任何用户信息-应用程序可以根据需要扩展和添加更多的机器,而不必担心用户登录的位置。 2.支持跨域访问: Cookie是不允许垮域访问的,token支持。 3.解耦: 不需要绑定到一个特定的身份验证方案。Token可以在任何地方生成,只要在 你的API被调用的时候, 你可以进行Token生成调用即可。 4.更适用于移动应用: Cookie不支持手机端访问,token支持。 5.性能: token生成

liu649983697的专栏 1844

setUnauthorizedUrl("/403")不起作用,不能设置没有权限的跳转页面

SpringBoot中集成Shiro的时候, 配置setUnauthorizedUrl("/403")了,但是不起作用,只会在控制台打印UnauthorizedException异常信息: 原因: Shiro源码中是这样做的: private void applyUnauthorizedUrlIfNecessary(Filter filter) { String unauth...

旧风年间的博客 1488

Guns权限管理系统实战:基于Shiro的数据权限控制终极方案

Guns权限管理系统是基于SpringBoot的后台管理系统框架,它完美整合了Spring MVC + Shiro + PageHelper + 通用Mapper + Beetl等技术栈。对于企业级应用开发而言,数据权限控制是权限管理系统的核心功能,Guns通过独创的MyBatis数据范围拦截器实现了简洁高效的数据权限控制方案。🚀 ## 什么是数据权限控制? 数据权限控制是指对拥有相同角色的

gitblog_00127的博客 821

shiro php,shiro从入门到放弃-初学者笔记

背景:使用SpringBoot + shiro + vue 搭建一个权限控制的系统问题: 遇到的一些可能感兴趣的问题1、doGetAuthorizationInfo不会被调用2、自定义过滤器导致访问资源认证出现混乱(过滤器失效)3、使用shiro进行动态的权限配置4、更改用户角色,如何让shiro知道并在下一次访问能做出调整5、前后端分离如何做到让unauthorizedUrl和loginUrl能...

weixin_33745006的博客 252
上一篇: springboot+shiro入门学习(二)
下一篇: springboot+shiro入门学习(四)记住我设置
若往夕之
博客等级 码龄9年 20粉丝 82原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值