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 =... 阅读详情

相关推荐

雪球股票数据接口

周期(day-日,week-周,…表示获取前8个周期(日)数据):类型(before-历史)表示深圳证券交易所,表示上海证券交易所):开始时间戳(一定要。

qq_31856061的博客 6807

Shiro页面权限拦截

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

qq_36008278的博客 2956

OneNET物联网平台实战:从零搭建到双向数据通信测试

本文提供了一份详细的OneNET物联网平台实战指南,从零开始讲解平台搭建与设备创建,并重点演示了如何通过MQTT协议实现设备数据上报与云端命令下发的双向数据通信测试。通过模拟设备连接与数据交互,帮助开发者快速理解物联网核心通信流程。

weixin_29306571的博客 350

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

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

二十一克阳光!的博客 912

vscode中创建vue快捷键

1.安装Vetur插件(扩展里面直接搜) 2.vscode 界面里面左上角选则 文件=> 首选项=> 用户代码片段=>新建全局代码片段=>在输入框中新建名称为vue.json 3.删除里面的注释,当然你也可以留着,把下面的代码粘贴进去! { // Place your 全局 snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and // descri

Leon_940002463的博客 3207

VsCode+JLink+GCC替代Keil开发GD32程序-个人总结

对个人使用vscode+Jlink开发GD32程序做了总结,供需要者参考。

MyCollege1999的博客 2762

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

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

FAIRYTAIL的博客 2282

二维卡尔曼滤波位置,速度融合

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...

Johnlee2019的博客 8451

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

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

banmajio的博客 1731

【CTFSHOW】web入门 黑盒测试

文章目录写在前面web380web381web382web383web384web385web386web387web388web389web390web391web392web393web394web395参考资料 写在前面 一直没搞过渗透,先学学黑盒测试吧 web380 进入题目发现是一个关于灯泡的悲伤故事,点进去,看到跳转到page_1.php页面。 我们访问page.php试试: 发现报错:$id.php,可以猜想需要传名称为id的参数,来访问id.php。我们访问page.php?id=1试试

7ruth0hn的博客 1897

开关电源环路补偿--开关电源进阶知识补充1

笔记 一 . 做开关电源环路补偿时候为了使得环路更加稳定。 1 .-- > 希望开关电源的相位裕量在45° 以上, 2. – > 希望开关电源的增益裕量在10db 以上 3. – > 希望开关电源增益曲线在过0db 时候以20db /dec 斜率下降(体现1个极点) 4. – > 希望开关电源补偿之后的带宽达到开关频率的是1/5 ~1/10,用以原理开关电源的开关噪音。 左边图示电源瞬态拉载和释放负载的时候输出电压存在明显的振铃,说明这个目前的环路相位裕量(phase m

qq_29776365的博客 1万+

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

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

化身强盗的博客 754

Python爬虫反爬:突破Cloudflare 5秒盾(免费方案,小红书/知乎可用)

这套方案的核心优势是“真实模拟+免费无门槛”无需付费代理、无需复杂JS解密,仅用playwright模拟真实浏览器,即可突破Cloudflare 5秒盾;适配小红书、知乎、豆瓣等主流平台,修改配置即可复用;兼顾易用性和稳定性,新手也能快速上手,企业级场景可通过IP轮换、异步爬取进一步优化。“模拟人类行为到底”——Cloudflare的反爬本质是区分“机器”和“人类”,只要爬虫的浏览器指纹、行为特征与人类一致,就能稳定绕过限制。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2880

Springboot+Shiro配置setUnauthorizedUrl()不生效

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

weixin_45864962的博客 1195

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VC中sqlite的使用

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

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

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

weixin_30432007的博客 414

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

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

皓亮君的博客 3060

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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、付费专栏及课程。

余额充值