shiro 404报错丢失session解决办法

1. 一般我们会在web.xml配置统一错误页面:

<error-page>

<error-code>404</error-code>

<location>/web-inf/views/error/404.jsp</location>

</error-page>


2. 场景:

1、首先登录成功后访问正常页面没有问题的;

2、接着访问一个不存在的页面,即跳到相应的404页面,假设我的页面是jsp的;

3、再刷新一下就会又跳到登录页面。


3.分析

shiro的defaultwebsessionmanager把 session 自己管理起来了,不放到 web 容器里,那么当发生 404 时, web 容器在处理过程里发现容器里没有 session ,那么就会建立一个新的 sessionid ,然后把 sessionid 绑定到请求上。于是 shiro 框架就认为是一个新的 session 来了,但是没有登录,所以自动跳转到 login 页面。


4.解决办法

<!-- 处理shiro 404 session丢失的问题 -->
    <bean id="defaultController" class="com.ishopping.manage.controller.DefaultController" />
    <bean id="defaulturlmapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="order" value="2147483647" /><!-- 此处的order很重要,要低于 mvc:resources的默认值2147483646-->
        <property name="mappings">
            <props>
                <prop key="/*/**">defaultController</prop>
            </props>
        </property>
    </bean>
public class DefaultController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        return new ModelAndView("error/404");
    }
}
注意:此controller一定不要用annotation方式,必须如上实现controller接口。因为如果用@controller/@requestmapping注解方式的话,就不能保证顺序排在匹配映射顺序的最后了

转自:http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E6%8E%92%E8%A1%8C/2976.shtml



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值