首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让Shiro用Spring Boot返回403禁止,而不是重定向到login.jsp

要让Shiro在Spring Boot中返回403禁止状态码而不是重定向到login.jsp页面,可以通过以下步骤实现:

  1. 首先,确保你已经集成了Shiro和Spring Boot,并且配置了相应的权限规则和登录认证逻辑。
  2. 在Spring Boot的配置文件(application.properties或application.yml)中,添加以下配置项,用于禁用Shiro的重定向功能:
代码语言:yaml
复制

shiro.redirectEnabled = false

代码语言:txt
复制

这样配置后,Shiro将不再自动重定向到login.jsp页面。

  1. 创建一个自定义的异常处理器类,用于捕获Shiro抛出的UnauthorizedException异常,并返回403禁止状态码。可以参考以下示例代码:
代码语言:java
复制

import org.apache.shiro.authz.UnauthorizedException;

import org.springframework.http.HttpStatus;

import org.springframework.web.bind.annotation.ControllerAdvice;

import org.springframework.web.bind.annotation.ExceptionHandler;

import org.springframework.web.bind.annotation.ResponseStatus;

@ControllerAdvice

public class ShiroExceptionHandler {

代码语言:txt
复制
   @ExceptionHandler(UnauthorizedException.class)
代码语言:txt
复制
   @ResponseStatus(HttpStatus.FORBIDDEN)
代码语言:txt
复制
   public String handleUnauthorizedException() {
代码语言:txt
复制
       return "403 Forbidden";
代码语言:txt
复制
   }

}

代码语言:txt
复制

在上述代码中,我们使用@ControllerAdvice注解标记该类为全局异常处理器,并使用@ExceptionHandler注解指定处理UnauthorizedException异常的方法。在该方法中,我们返回了一个自定义的403 Forbidden字符串作为响应。

  1. 确保自定义的异常处理器类被正确扫描到,可以将其放置在Spring Boot应用程序的扫描路径下,或者使用@ComponentScan注解进行指定。
代码语言:java
复制

@SpringBootApplication

@ComponentScan(basePackages = "com.example")

public class Application {

代码语言:txt
复制
   public static void main(String[] args) {
代码语言:txt
复制
       SpringApplication.run(Application.class, args);
代码语言:txt
复制
   }

}

代码语言:txt
复制

在上述代码中,将自定义异常处理器类所在的包路径(com.example)添加到@ComponentScan注解的basePackages属性中。

  1. 现在,当Shiro验证失败时,将会抛出UnauthorizedException异常,并返回403禁止状态码,而不再重定向到login.jsp页面。

请注意,以上步骤仅适用于禁用Shiro的重定向功能,并返回403禁止状态码。如果你还需要其他自定义行为或逻辑,可以根据具体需求进行相应的修改和扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring Boot 集成Shiro和CAS

Spring Boot 集成Shiro和CAS 请大家在看本文之前,先了解如下知识点:  1、Shiro 是什么?怎么?  2、Cas 是什么?怎么? ...3、最好有Spring基础 可以先看看这两篇文章,按照这2篇文章的内容做一遍:  Spring Boot Shiro 权限管理 CAS单点登录 首先看一下下面这张图:  第一个流程是单纯使用Shiro...如果你只是打算用到你的Spring Boot项目中,那么看着如下配置完成便可。  如果你想进一步了解其中的细节,还是建议大家单独配置Shiro、单独配置Cas,看看官方相关文档。 ...cas被shiro集成后,其原理就是shiro将casFilter加入shiroFilter的filterChain中。...Spring Boot中集成Shiro+Cas,并非一个从零创建工程整体完成的介绍。

7K51
  • Java安全框架「shiro

    使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序最大的网络和企业应用程序。...Subject在shiro中是一个接口,接口中定义了很多认证授相关的方法,外部程序通过subject进行认证授,subject是通过SecurityManager安全管理器进行认证授权 SecurityManager...SessionDAO SessionDAO即会话dao,是对session会话操作的一套接口,比如要将session存储数据库,可以通过jdbc将会话存储数据库。...loginUrl: 没有登录的用户请求需要登录的页面时自动跳转到登录页面,不是必须的属性,不输入地址的话会自动寻找项目web项目的根目录下的”/login.jsp”页面。...在spring中直接引入 第五步:在spring-mvc.xml中配置权限的控制 异常的跳转 <!

    92030

    Shiro的原理及Web搭建

    使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序最大的网络和企业应用程序。...Subject在shiro中是一个接口,接口中定义了很多认证授相关的方法,外部程序通过subject进行认证授,subject是通过SecurityManager安全管理器进行认证授权 SecurityManager...SessionDAO SessionDAO即会话dao,是对session会话操作的一套接口,比如要将session存储数据库,可以通过jdbc将会话存储数据库。...loginUrl: 没有登录的用户请求需要登录的页面时自动跳转到登录页面,不是必须的属性,不输入地址的话会自动寻找项目web项目的根目录下的”/login.jsp”页面。...在spring中直接引入 第五步:在spring-mvc.xml中配置权限的控制 异常的跳转 <!

    80820

    shiro笔记(五)springboot 整合shiro框架,实现加密登录功能,并且实现remeberme功能

    >shiro-spring-boot-web-starter 1.4.2 </dependency...此时shiro的过滤器,将我们的 请求路径,转为login.jsp了,但是我们没有这个页面,所以报错 ?...如果我们没有登录,直接访问需要登录才可以访问的接口,那么shiro框架会自定义给你转到login.jsp页面。...shiro: ##当用户访问某个需要登录的功能时,但是被shiro内置的过滤器拦截后,判断本次请求 ##没有登录,而是直接访问的,则重定向loginUrl的路径资源响应给用户 loginUrl...以上就是shiro框架已经拿到了remeberme 的参数了,框架就自动给你实现记住我功能了,但是得配置开启这个记住我的功能,如何开启,那么就需要在shiro的配置文件里面开启了。

    70740

    Shiro框架学习,Shiro拦截器机制

    request, ServletResponse response) //重定向登录页面 比如基于表单的身份验证就需要使用这些功能。...true表示允许; onAccessDenied:表示访问拒绝时是否自己处理,如果返回true表示自己不处理且继续拦截器链执行,返回false表示自己已经处理了(比如重定向另一个页面)。...),否则如果是get方法的其他页面请求则保存当前请求并重定向登录页面; 3、如果是post方法的登录页面表单提交请求,则收集用户名/密码登录即可,如果失败了保存错误消息“shiroLoginFailure...”并返回到登录页面; 4、如果登录成功了,且之前有保存的请求,则重定向之前的这个请求,否则默认的成功页面。...),那么重定向未授权页面;否则直接返回401未授权错误码。

    1.4K21

    Shiro框架学习,Shiro与Web集成

    :shiro.ini,即默认相对于web应用上下文根路径; 3、也可以通过如下方式直接内嵌ini配置文件内容web.xml Java代码 ?...然后将ShiroFilter配置spring容器即可: Java代码 ?...当前实现的一个缺点就是,永远返回到同一个成功页面(比如首页),在实际项目中比如支付时如果没有登录将跳转到登录页面,登录成功后再跳回到支付页面;对于这种功能大家可以在登录时把当前请求保存下来,然后登录成功后再重定向该请求即可...urls] /role=authc,roles[admin] /permission=authc,perms["user:create"] 通过unauthorizedUrl属性指定如果授权失败时重定向的地址...req.getRequestDispatcher("/WEB-INF/jsp/logoutSuccess.jsp").forward(req, resp); } } 直接调用Subject.logout即可,退出成功后转发/重定向相应页面即可

    1.2K40

    不用 Spring Security 可否?试试这个小美的安全框架

    近看 Shiro 看细节 看图瞬间懵逼?别慌,会为你拆解来看,结合着图看下面的解释,这不是啥大问题,且看: ?...Spring BootShiro 也很应景的定义了 starter,做了更好的封装,对于我们来说使用起来也就更加方便,来看选型概览 序号 名称 版本 1 Springboot 2.0.4 2 JPA...我们也可以这个过滤器做默认的登录逻辑,但是一般都是我们自己在控制器写登录逻辑的,自己写的话出错返回的信息都可以定制嘛。...这里我们要停一停了,请回看 Shiro 近景图,将源码追踪路径与其对比,是完全一致的 授权 身份认证是验证你是谁的问题,授权是你能干什么的问题, 产品经理:申购模块只能科室看程序员:好的产品经理:科长权限大一些...starter 已经提供了基本的 Session配置信息,我们按需在YAML中配置就好(官网https://shiro.apache.org/spring-boot.html 已经明确给出Session

    53230

    不用 Spring Security 可否?试试这个小美的安全框架

    近看 Shiro 看细节 看图瞬间懵逼?别慌,会为你拆解来看,结合着图看下面的解释,这不是啥大问题,且看: ?...Spring BootShiro 也很应景的定义了 starter,做了更好的封装,对于我们来说使用起来也就更加方便,来看选型概览 序号 名称 版本 1 Springboot 2.0.4 2 JPA...我们也可以这个过滤器做默认的登录逻辑,但是一般都是我们自己在控制器写登录逻辑的,自己写的话出错返回的信息都可以定制嘛。...这里我们要停一停了,请回看 Shiro 近景图,将源码追踪路径与其对比,是完全一致的 授权 身份认证是验证你是谁的问题,授权是你能干什么的问题, 产品经理:申购模块只能科室看程序员:好的产品经理:科长权限大一些...starter 已经提供了基本的 Session配置信息,我们按需在YAML中配置就好(官网https://shiro.apache.org/spring-boot.html 已经明确给出Session

    62010

    Springboot 集成 Shiro 和 CAS 实现单点登录(客户端)

    -- shiro spring. --> org.apache.shiro shiro-spring...> 1.2.6 前两个一个是SpringShiro结合的shiro-spring包和与ehcache结合的shiro-ehcache...Shiro的设置类和登录验证获取权限的管理类,在这里我将不再赘述该类如何使用,直接上集成了CAS的这两个类: 首先是设置类: import com.dhcc.pa.domain.SPermission;...org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; import org.apache.shiro.spring.web.ShiroFilterFactoryBean...注释写的都比较清楚了, 我这里将不再赘述,这里只有一个知识点需要强调一下: 在这个设置类中如果需要从数据库获取用户的权限列表,一定要将对应的Service写在shiroFilter这个方法里当作一个参数来使用,不能直接

    2.7K30

    Shiro 实战(四) - 过滤器机制1 简介2 过滤器链

    提供基于Ant风格的请求路径匹配功能及拦截器参数解析的功能,如roles[admin,user]自动根据,分割解析一个路径参数配置并绑定相应的路径 pathsMatch ?...提供访问控制的基础功能;比如是否允许访问/当访问拒绝时如何处理等 isAccessAllowed ?...AccessControlFilter还提供了如下方法用于处理如登录成功后/重定向到上一个请求 void setLoginUrl(String loginUrl) //身份验证时使用,默认/login.jsp...saveRequestAndRedirectToLogin(ServletRequest request, ServletResponse response) throws IOException //将当前请求保存起来并重定向登录页面...request, ServletResponse response) //重定向登录页面 比如基于表单的身份验证就需要使用这些功能 ?

    2.4K21

    Shiro 集成 Spring

    前言 本章我们来学习 Shiro 集成 Spring,即在 Web 环境下如何使用 Shiro 来进行权限控制。...我们需要 3 个配置文件,分别为 spring.xml, spring-web.xml, spring-shiro.xml。...原因是因为我们在 filterChainDefinitions 过滤器链中仅为 login.jsp 与 login 配置了可匿名访问, index.jsp 这上述配置中的是需要认证后才可访问。...那么我们来考虑一下缓存问题: 认证就不用说了,涉及的查询就一条,根据用户名返回用户信息即可,没必要进行缓存。...但授权却比较麻烦,因为授权时我们一般都会去调用数据库来查询其用户所拥有的角色和权限,往往这都会涉及多表查询。所以我们是否可以将授权数据缓存起来呢?应该如何进行缓存?缓存后角色或权限数据修改了怎么办?

    71220
    领券