解决Shiro登录成功之后跳转路径为空,浏览器登陆成功显示小绿叶界面问题。

Shiro之Session分析 本文中的时序图使用在线工具https://www.websequencediagrams.com/生成 背景:使用Spring boot搭建web工程,使用shiro做认证授权工作 疑惑:成功登录之后,再次请求时,服务器是如何知道已经登录,是哪个用户,是使用HttpSession还是shiro的Session SecurityUtils.getSubject() 在处理请求时,可以通过Securi... 阅读详情

通常我们使用shiro,登录之后就会跳到我们上一次访问的URL,如果我们是直接访问登录页面的话,shiro就会根据我们配置的successUrl去重定向,如果我们没有配置successUrl的话,那么shiro重定向默认的/,这个逻辑看shiro的源码就可以知道。所以如果说你上一次的访问路径为空那下一次登录重定向地址默认的"/",则会出现登录成功后界面跳转到icon小绿叶界面。我们需要定义一个类来处理路径若为空的结果。

 

1.shiro会把请求信息保存到session中:

2.然后判断是否已经登录,如果没有登录,就会跳到登录页面,用户输入凭证之后就会交给FormAuthenticationFilter这个类来处理;

3.如果登录成功之后就会调用重定向

4.shiro去session中找出之前的保存的请求,如果没有的话就会跳转到我们配置的successUrl!

但是现实中往往有很多需求就是,要求我们登录成功之后要跳到一个固定的页面,通常是跳到首页,那这时候我们应该怎么做呢?

通过查看源码,我发现在shiro的webUtils工具类中有这样一个方法:

我们可以定义MyFormAuthziction 类重写登录方法,继承FormAuthenticationFilter 这个类

package com.jk.shiro;

import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;
import org.apache.shiro.web.util.SavedRequest;
import org.apache.shiro.web.util.WebUtils;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyFormAuthziction extends FormAuthenticationFilter {
    /**
     * 重写登录成功方法
     * @param token
     * @param subject
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @Override
    protected boolean onLoginSuccess(AuthenticationToken token, Subject subject, ServletRequest request, ServletResponse response) throws Exception {
        //清空原有路径 跳转到下一个路径
        SavedRequest savedRequest = WebUtils.getAndClearSavedRequest(request);
        if(savedRequest!=null) {
            String requestUrl = savedRequest.getRequestUrl();
            System.out.println(requestUrl);
            //如果上一次请求路径为空 则跳转到登录成功页面
            if ("/".equals(requestUrl)) {
                WebUtils.redirectToSavedRequest(request, response, "/index");
            } else {
                //如果上一次请求正常 则直接重定向到上一次请求
                WebUtils.redirectToSavedRequest(request, response, requestUrl);
            }
        }else {
            WebUtils.redirectToSavedRequest(request, response, "/index");
        }
        return false;
    }
}

这样,就实现了在交给shiro处理重定向的时候清理了session中保存的请求信息,这样的话,就可以我们指定的url传递进去,这样就实现了跳转到我们指定的页面;

 

 

其次,要把我们定义的过滤器配置一下,你的配置类(ShiroConfig)里需要修改默认核心过滤器  authc

        //修改默认核心过滤器 authc
        Map<String, Filter> filterMap = new HashMap<String, Filter>();
        filterMap.put("authc", new MyFormAuthziction());
        shiroFilterFactoryBean.setFilters(filterMap);

这样就完成了,我们每次登录成功都会跳转到你指定的主页面!

 

Linux下基于AHCI controller模块实现SATA Platform驱动附代码详细流程 本文主要是针对ARM A55集成了AHSATA controller模块开发sata驱动,通过Platform的形式在linux识别到SSD,本文详细讲述整个开发过程,同时对SATA Platform驱动进行讲解。1、配置SATA Phy的初始化;2、打开SATA Platform相关编译开关;3、配置设备树;4、linux启动识盘。 阅读详情

相关推荐

scGPT实战指南:如何用生成式AI加速你的单细胞多组学研究?

本文提供了scGPT在单细胞多组学研究中的实战指南。详细介绍了从环境部署、数据预处理到细胞类型注释与扰动预测等核心任务的操作流程。通过利用生成式AI和Transformer基础模型,scGPT能够显著加速分析,并提升细胞注释的准确性及基因调控网络推断的深度,为研究人员提供了强大的AI分析引擎。

weixin_29215815的博客 402

springboot整合shiro无法获取当前用户/session中值为null

maven包 <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.5.3</version> </dependency> 实现AuthorizingRealm接口 //校验权

qq_39264897的博客 3423

掌握SiOME:从零构建OPC UA信息模型的完整指南

本文是掌握SiOME工具的完整指南,详细介绍了如何利用这款免费且强大的OPC UA建模工具,从零开始构建信息模型。内容涵盖从获取软件、创建命名空间、定义对象类型与变量,到添加方法、生成XML文件,并最终将其集成到开源的open62541服务器中。通过可视化建模,开发者可以高效、准确地设计复杂模型,大幅提升工业物联网与自动化项目的开发效率。

tcp8optimizer的博客 514

shiro 登陆成功后subject依然为空

shiro框架是一个强大的轻量级java安全框架。它提供了权限验证、加密、session管理的功能。shiro易用、上手快,应用场景大到企业级应用、小到手机应用都可以使用。本文就针对shiro的subject一个点展开,讲讲这个subject的来龙去脉。 我关注这个类要从一次错误说起。在我的项目里面突然就出现subject无法获得principals字段信息的情况,自然我每次登陆再请求什么都是su...

淡淡的博客 1万+

BIM模型导入SuperMap

目录 一、超图 BIM插件安装 1.1 插件下载 1.2 安装 二、BIM模型导出 2.1 Revit插件导出 2.2 SuperMap导入工具 三、SuperMap BIM数据处理与服务发布 四、SuperMap三维数据处理中关于模型高程修改方法 一、超图 BIM插件安装 1.1 插件下载 下载链接:http://support.supermap.com.cn/DownloadCenter/DownloadPage.aspx?tt=ProductAAS&id=134 1..

爱晒太阳的风 3595

【无标题】 Python自动化法律文书撰写

Jinja2是一个功能强大的模板引擎,支持丰富的语法和功能。除了条件判断和循环语句外,Jinja2还支持过滤器、宏、继承等高级特性,非常适合处理复杂的文书模板。

master_chenchen的博客 2061

SpringBoot如何修改网页标签上展示的小树叶图标

SpringBoot如何修改网页标签上展示的小树叶图标 1、打开Spring Boot Web应用,进入应用首页后可以看到如下默认的绿色小图标 2、在Spring Boot的配置文件application.properites中添加配置项spring.mvc.favicon.enabled=false可以关闭默认的Favicon,关闭后的效果如下图所示。 3、下载ico图片,将图片复制到项目路...

xinhuazhongxue的博客 3099

(三) Debian 安装linuxcnc-ethercat中间件

1.在这里同样的也是需要下载一下依赖包 sudo apt install linuxcnc-uspace-dev 2.依赖包安装完成, 接着执行下面命令 sudo git clone https://github.com/sittner/linuxcnc-ethercat 还是可能出现下载网络错误下载不成功,可以直接下载我已上传百度云linuxcnc目录下 注意一下,后面make可能会出现头文件(xxx.h)的报错提示,在这里给大家一个处理办法 用aptitude 工具可以搞定 sudo apt-get

qq_30065813的博客 828

登录拦截器(拦截请求,不同请求进入不同的登录页面)

登录拦截,根据拦截到的请求不同,跳转不同的登录页面

snowing1997的博客 393

视觉Transformer实战 | 将卷积引入视觉Transformer(CvT)

CvT 是一种融合卷积神经网络与 Vision Transformer 优势的视觉模型,旨在解决 ViT 缺乏平移不变性和局部性等归纳偏置的问题。CvT 采用分层结构逐级降采样,使用卷积词元嵌入代替传统 patch 切分,引入卷积投影替代线性投影。这些设计使得 CvT 能够去除位置编码,在高分辨率输入下表现更优。本节深入解析 CvT 的核心原理,并提供完整的 PyTorch 代码实现,演示如何在实际数据集上训练和评估 CvT 模型。

盼小辉丶的博客 725

11.嵌入式控制器EC实战 KBC矩阵键盘Keyboard开发流程

文章目录笔记本矩阵键盘概述矩阵键盘的扫描方式行列扫描方式逐行逐列扫描方式EC中矩阵键盘是如何扫描并得到码值的(代码分析) 笔记本矩阵键盘概述 在EC中支持两种形式的键盘,一种是PS/2接口的键盘,这种键盘几乎已经被USB接口的键盘所取代,所以PS/2接口的键盘不在我们的讨论范围。 另一种键盘则是矩阵键盘,也是笔记本电脑的内置键盘,该键盘类似于学习单片机时使用的4*4的那种键盘,笔记本使用的矩阵键盘有三种规格,分别是16*8、17*8和18*8。16、17和18代表着该款键盘的列数,8代表着键盘的行数,我们这

qq_30135687的博客 3809

shiro,getPrincipals()为null的问题

记录登录日志的切面, Subject currentUser = SecurityUtils.getSubject(); ShiroUser shiroUser = null; shiroUser = (ShiroUser) currentUser.getPrincipals().getPrimaryPrincipal(); getPrincipals()这个方法怎么获取都是空, 但是token还获取成功了,也登录成功了,就是获取不到。 最后发现 token是生成了不假,但是下面的login方法当时是漏

鹏的博客 3812

【测开求职】面试题:数据结构 吐血整理

本篇文章是笔者为准备研究生复试以及校招而写,因此主要针对问答,注重理解,而不在于细节计算。涵盖考研范围内的所有知识内容,读者可以先查看上面的链接走一遍数据结构的整体框架结构。其中,重点难点以及易混淆的知识点,笔者用其他近30篇文章进行了详述,在知识点处贴好了链接,有需要的可以查阅。

vector的博客 7064

shiro实现登录成功后跳转到之前的页面

使用Shiro实现不同用户登录成功后跳转到不同的主页 项目背景: 在项目中使用sso统一认证中心实现登录模块,各个业务模块均不提供登录入口,如何在用户登录成功后跳转到之前访问路径呢? 由于项目中集成了shiro,里面就有这么个功能 shiro在跳转前有记录跳转前的页面,当前没有认证的用户请求需要认证的链接时,shiro在跳转前会把跳转过来的页面链接保存到session的...

曰业而安的博客 3448

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Caused by: java.lang.ClassNotFoundException: org.apache.shiro.web.util.SavedRequest

问题: org.crazycake.shiro.exception.SerializationException: deserialize error at org.crazycake.shiro.serializer.ObjectSerializer.deserialize(ObjectSerializer.java:55) at com.*.*.utils.L...

LHQChocolate的专栏 1980

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

WebUtils工具类解析

WebUtils根据名称,知道是Spring当中一个工具类,主要用于Web应用程序,供各种框架使用。其下有一些方法,如下:1.将一个系统性质设置到上下文根路径 public static void setWebAppRootSystemProperty(ServletContext servletContext) throws IllegalStateException { Assert.no...

weixin_38938982的博客 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Caused by java.lang.ClassNotFoundException org.apache.shiro.web.util.SavedRequest

Caused by: java.lang.ClassNotFoundException: org.apache.shiro.web.util.SavedRequest —很明显的错误提示。

李白 430

shiro不能跳转到登录前请求页面

现象:某商品展示页面不需要用户登录也可浏览,但是想购买商品时,需要用户先登录,这时点击button提交表单时被shiro拦截,转向登录页面。登录成功够跳转到网站根目录了,应该是跳转到登录前请求页面,即清单结算页面。问题:由于提交的表单是以POST方式提交的,所以shiro不会取得上次请求路径。 org.apache.shiro.web.util.WebUtils.redirectToSavedRe

tjliudebin的博客 5025

shiro简单使用

shiro配置文件shiro.xml,主要是暴露几个自定义的类 1、跟当前用户有关系的类,MyRealm.java,登陆验证,当前用户具有的角色权限 2、跟项目所有权限有关的类,ChainDefinitionSectionMetaSource.java,加载所有的权限,启动项目的时候加载 3、自定义验证功能的类,MyPermissionAuthorizationFilter.java,这个是...

shuai的博客 293

Shiro登录记录请求地址的问题解决

Shiro在登录失败的情况下记录了上次请求的地址 产生的原因: 通常我们使用shiro,登录之后就会跳到我们上一次访问的URL,如果我们是直接访问登录页面的话,shiro就会根据我们配置的successUrl去重定向。 1、shiro会把请求信息保存到session中: 在WebUtils工具类中保存了当前请求地址的路径 public static void saveRe...

失忆๑的博客 703

解决Tomcat+SpringMVC+Shiro redirect重定向失败问题

2、查阅网上许多文章,都说是配置springMVC的属性redirectHttp10Compatible为false,默认是true是使用HTTP 1.0协议,即http。生产环境项目编辑用户信息后,发现编辑完后没办法跳转页面,一直停留在当前页面,看代码发现是有通过 redirect: /xxx/xxx 重定向跳转页面,但明显不起作用了。1、看了接口请求,是有生成Location的,但是明显使用的协议不一样,Request URL是https,而Location确实http。

weixin_46764966的博客 502

使用shiro权限验证框架,request一直为null,获取项目根路径的解决办法

问题说明:项目使用shiro权限验证框架后,request.getSession().getServletContext().getRealPath("/")就一直都得不到项目的根路径,debug之后,显示request为null,如下图所示: 解决办法一: 1.在web.xml配置中找到shiro配置加入如下配置: <init-param> <param-name>targetFilterLifecycle</param-name> <param-value

爱吃鸡腿的明仔 908

解决Springboot整合Shiro自定义SessionDAO+Redis管理会话,登录后不跳转首页

解决Springboot整合Shiro自定义SessionDAO+Redis管理会话,登录后不跳转首页

码农的艺术 707

【项目问题】登陆了系统,但有些时候获取不到用户名

原因:Shiro在Springboot中没有配置在Service层直接使用ShiroUtils.getUser()这个方法 在service中直接使用ShiroUtils.getUser()这个方法,但是没有配置能在service层直接使用,就导致获取用户名为null

11 1007

shiro:principal为空问题

1、服务端 SimpleAuthenticationInfo(shiroUser, user.getPwd(), user.getLoginName()); 2、jsp页面 <%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %> 3、 <shiro:principal property="name"/>

ljz9425的专栏 1655

若依框架 --- 修改默认跳转页面

若依框架修改默认跳转页面

3153
上一篇: SpringBoot 集成 Shiro 加入Ehcache缓存
下一篇: Shiro拦截器给方法授权,赋访问权限
听风动
博客等级 码龄8年 63粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听风动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值