Shiro整合SSH开发3:配置Shiro认证后页面地址跳转问题(和详述不配置需要注意的问题)

在视频教程中讲请求认证成功后跳转页面的问题是一笔带过的,但是我觉得有必要单独写一篇对应的文章进行叙述。

我用了SSH来整合Shiro,在开发后验证的过程中,每次登陆后Shiro都会跳转到一个不知名js中,但是重点是我上一次访问的地址是:

Edit

http://localhost:8080/shiro_05/user/login.action

认证之后应该跳转到上一个请求的地址,但是Shiro却跳转到了:

http://localhost:8080/shiro_05/user/js/eqmt.js

本应该跳转到上一次访问的页面的,但是却跳转到这个js文件的请求路径中,而且这个路径还是奇奇怪怪的。

我猜这个问题应该困扰了不少人,即使js、css等文件夹配置了匿名访问等,还是出现这个问题:【认证后地址乱跳,不是上一个你所请求进来时候所在的地址】。甚至有人放弃了Shiro自带的“跳转到上一个请求路径”这个功能。应该也有很多人解决了这个问题,在这里,我就简单说一下吧。

经过检查后终于发现问题所在:在页面中存在另一个非绝对路径的请求地址!


此文老猫原创,转载请加本文连接:http://blog.csdn.net/nthack5730/article/details/51132560

更多有关老猫的文章:http://blog.csdn.net/nthack5730

首先说一下在Shiro中配置默认认证成功后跳转的地址或者请求:

在shiroFilter的Bean配置中

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
....
</bean>

添加一下参数:

<property name="successUrl" value="/user/list.action" />

就可以使每次在认证成功后自动转发到value里面的地址(我这里用的是/user/list.action,也就是去请求这个地址)

当不配置这个参数的时候,Shiro会自动请求上一次你访问的地址。假设,你访问地址:http://localhost:8080/shiro_01/user/

现在假设这个地址是需要认证通过才能访问的,也就是在过滤链中配置为/user/** = authc

那么就会进入认证页面,而上面的地址就会被保存至Shiro中,当认证通过后,会自动请求浏览器访问刚刚保存的地址

http://localhost:8080/shiro_01/user/

但是当页面文件加载不正确,在认证完成后就会访问地址:

http://localhost:8080/shiro_01/user/***.***

我的修改前的页面在认证后浏览器会去访问下面这个地址:

http://localhost:8080/shiro_01/user/js/eqmt.js


此文老猫原创,转载请加本文连接:http://blog.csdn.net/nthack5730/article/details/51132560

更多有关老猫的文章:http://blog.csdn.net/nthack5730

为什么会出现这个问题呢,原因就在于登陆页面中或许有部分的第三方加载的样式、js等文件没有被正确录入。什么是不正确录入,只要是请求本地服务器,或者请求为:http://localhost:8080/shiro_01/*******.***

这种形式的,也就是在认证前和你上一个访问的页面之间再访问本服务器被shiro拦截的任意地址。就会被Shiro自动保存至上一个请求地址的这个变量中,当你认证完成后会Shiro就会要求你的浏览器自动跳转到这个地址

【注:CDN挂载加载的不算,因为不是请求本服务器。】


下面给出我的页面代码,里面的请求【自带js】这部分就是为http请求的而不是绝对路径加载进来的:

<!-- 公共样式文件引入 -->
<jsp:include page="Template/css.jsp"></jsp:include>

<!-- 自带js -->
<script src="js/eqmt.js"></script>

<!-- 自建样式表 -->
<link href="${pageContext.request.contextPath}/css/eqmt.css" rel="stylesheet" type="text/css">
<link href="${pageContext.request.contextPath}/css/login.css" rel="stylesheet" type="text/css">

除了:<script src="js/eqmt.js"></script>

这个加载通过绝对路径加载不成功,然后浏览器自动访问了相对地址,即浏览器用http的形式访问,Shiro记录这个eqmt.js文件的访问地址(还是错误的地址)其他的都是内部绝对路径访问的。【我在过滤链里面配置了对应绝对路径的文件的匿名访问】

只要将错误加载的代码改正或删除或者将文件挂载到cdn访问,问题就可以解决了:

<script src="${pageContext.request.contextPath}/js/eqmt.js"></script>

PS:里面的:${pageContext.request.contextPath}是我的项目地址。JSP有这个蛋疼的问题,相信很多人都知道。

【上面的总结是我个人感受写的,可能具体的学名和形容词在形容的过程中用得不恰当,望大家发现后指出并帮忙纠正,感激不尽!】

此文老猫原创,转载请加本文连接:http://blog.csdn.net/nthack5730/article/details/51132560

更多有关老猫的文章:http://blog.csdn.net/nthack5730

时间: 2024-11-10 16:17:23

Shiro整合SSH开发3:配置Shiro认证后页面地址跳转问题(和详述不配置需要注意的问题)的相关文章

Shiro整合SSH开发4:Realm授权,perms过滤器测试和使用方法讲述

使用:org.apache.shiro.web.filter.authz.RolesAuthorizationFilter进行授权拦截 本文还是使用静态的验证方式,将在以后一步步进行数据库查询认证信息和授权信息,不过,为了方便大家一步步学习和查看,还是先从静态的方式开始吧.      perms(许可验证)      org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter perms:例子/admins/user/**=p

关于Nginx配置Https server后,乱跳的问题解决记录

大部分的服务器上,我们会在一个Nginx服务下配置多个vhost,以最大化运用服务器资源.然而,为其中一个vhost域名启用 HTTPS 之后,发现百度统计的实时访客或入口页中,存在一些来自其它域名的请求.即通过 https://some-other-domain.com/some-url 来访问对应的 https://www.domain.com/some-url 结果就是 Google 浏览器显示了一个安全警告页面,认为这是一个不安全的网页.因为我只配置了 www.domain.com 的

限制SSH访问源,禁止4A之外的地址跳转访问

[fuel节点] 在/etc/hosts.allow文件中添加: sshd:10.129.0.1:allow sshd:10.129.0.2:allow sshd:10.129.0.3:allow sshd:10.129.3.1:allow sshd:10.129.3.2:allow sshd:10.129.3.3:allow 在/etc/hosts.deny文件中添加:sshd:ALL 最后sshd重启 service sshd restart [control节点] 在/etc/hosts.

业务逻辑:五、完成认证用户的动态授权功能 六、完成Shiro整合Ehcache缓存权限数据

一. 完成认证用户的动态授权功能 提示:根据当前认证用户查询数据库,获取其对应的权限,为其授权 操作步骤: 在realm的授权方法中通过使用principals对象获取到当前登录用户 创建一个授权信息对象 根据用户查询角色列表,并遍历角色列表 在循环体中将角色关键字添加到授权信息对象的角色属性中 根据用户查询权限列表,并遍历权限列表 在循环体中将权限关键字添加到授权信息对象的权限属性中 在角色与权限service类的根据用户查询角色与权限方法中判断用户是否为系统管理员 如果是系统管理员就查询出所

配置shiro ehcache 出现这个异常,(未解决) java.lang.NoClassDefFoundError: org/terracotta/statistics/StatisticsManager

参考 https://www.cnblogs.com/zfding/p/8536480.html Caused by: org.springframework.beans.FatalBeanException: Error initializing bean [cacheManager]; nested exception is org.apache.shiro.cache.CacheException: net.sf.ehcache.CacheException: java.lang.NoCl

shiro整合spring配置

shiro应用到项目中,一般都是通过spring来管理.下面就如何把shiro整理到spring中进行了讲解,及给出了配置的步骤: 一.pom.xml文件配置 本例子主要是介绍maven管理的web项目进行配置介绍,因此,首先需建立好一个maven管理的web项目(可参考本博客创建maven管理的web项目). pom.xml文件配置,主要是添加相关依赖的jar支持.因为整合到spring中需添加spring支持.具体配置参考配置代码: 1 <project xmlns="http://m

springboot,vue,shiro整合 关于登录认证功能

首先是session问题 传统session认证 http协议是一种无状态协议,即浏览器发送请求到服务器,服务器是不知道这个请求是哪个用户发来的.为了让服务器知道请求是哪个用户发来的,需要让用户提供用户名和密码来进行认证.当浏览器第一次访问服务器(假设是登录接口),服务器验证用户名和密码之后,服务器会生成一个sessionid(只有第一次会生成,其它会使用同一个sessionid),并将该session和用户信息关联起来,然后将sessionid返回给浏览器,浏览器收到sessionid保存到C

Spring+SpringMVC+Hibernate 与 shiro 整合步骤

通过这篇文章你可以了解到: SSH 三大框架(spring + springMVC + Hiberante) 与 shiro 安全验证框架如何整合: 通过一个示例,快速理解 shiro 框架. [TOC] 1. 业务需求分析 用户 N - 角色 N - 权限 N 我们可以想象一下,在平时工作中的职务,比如:业务经理,部门主管等,他们拥有很多的权力,而一个公司中不会只有一个业务经理,也不会只有一个部门主管,如果我们要给不同的人分配职务权力时,每次都是具体的条条框框去分配,人累心也累.而如果我们事先

教你 Shiro 整合 SpringBoot,避开各种坑

最近搞了下 Shiro 安全框架,找了一些网上的博客文章,但是一到自己实现的时候就遇到了各种坑,需要各种查资料看源码以及各种测试. 那么这篇文章就教大家如何将 Shiro 整合到 SpringBoot 中,并避开一些小坑,这次实现了基本的登陆以及角色权限,往后的文章也讲解了其他的功能,如 <教你 Shiro + SpringBoot 整合 JWT> 附上源码:https://github.com/HowieYuan/shiro 依赖包 <dependency> <groupI