shiro 404 jessionid

1. 問題提出的根源:java

處理404 notfound錯誤。web

 緣由分析spring

shiro的DefaultWebSessionManager把session本身管理起來了,不放到web容器裏,那麼當發生404時,web容器在處理過程裏發現容器裏沒有session,那麼就會創建一個新的sessionid,而後把sessionid綁定到請求上。因而shiro框架就認爲是一個新的session來了,可是沒有登陸,因此自動跳轉到login頁面。spring-mvc

成功的方案session

不用web容器的error-page處理。在spring mvc裏配置一個能匹配全部請求的處理器,可是要保證這個默認的處理器排在url映射匹配排序的最後。mvc

spring-mvc.xml裏添加以下的beanapp

<bean id="defaultController" class="com.ikang.base.web.DefaultController" />
<bean id="defaultUrlMapping"
    class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="order" value="2147483647" /><!-- 此處的order很重要,要低於 mvc:resources的默認值214    7483646-->
        <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註解方式的話,就不能保證順序排在匹配映射順序的最後了。框架

相關文章
相關標籤/搜索