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


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

         我用了SSH来整合Shiro,在开发后验证的过程中,每次登陆后Shiro都会跳转到一个不知名js中。可是重点是我上一次訪问的地址是:
    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等文件没有被正确录入。什么是不对录入。仅仅要是请求本地server,或者请求为:http://localhost:8080/shiro_01/*******.***
    这样的形式的,也就是在认证前和你上一个訪问的页面之间再訪问本server被shiro拦截的随意地址。就会被Shiro自己主动保存至上一个请求地址的这个变量中。当你认证完毕后会Shiro就会要求你的浏览器自己主动跳转到这个地址
    【注:CDN挂载载入的不算。由于不是请求本server。】



    以下给出我的页面代码。里面的请求【自带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




  • 相关阅读:
    DS博客作业02--栈和队列
    DS博客作业03--树
    C博客作业05--指针
    C语言博客作业04--数组
    C博客作业03--函数
    C博客作业02--循环结构
    C博客作业01--分支、顺序结构
    我的第一篇博客作业
    java购物车案例
    第三周-自主学习任务-面向对象基础与类的识别
  • 原文地址:https://www.cnblogs.com/llguanli/p/8876405.html
Copyright © 2020-2023  润新知