struts2攔截功能進行登入攔截



使用struts2攔截功能進行登入攔截,整個過程主要依賴session中是否有用戶的信息;

如果沒有我們就進行攔截,然後自動跳轉到登入頁面。


1.首先,我們創建一個攔截類,並繼承AbstractInterceptor實現其方法intercept(ActionInvocation invocation);

public class FilterLogin extends AbstractInterceptor {
	
	Logger logger = Logger.getLogger(this.getClass());
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
        ActionContext actionContext = invocation.getInvocationContext();
        HttpServletRequest request = (HttpServletRequest) actionContext
            .get(StrutsStatics.HTTP_REQUEST);
        //獲取用戶session  用於判斷用戶是否登入
        Map<String, Object> session = actionContext.getSession();
        
        //首先判斷session,查找是否登錄成功,通過攔截器
        if (session != null && session.get("username") != null) {
            logger.info("通過攔截器,session中有記錄[" + session.get("username") + "]");
            return invocation.invoke();
        }
        System.out.println("you no login  ");
        return "loginUI";
	}
}


2.攔截類我們已經完成,下面就是登入頁面,這裏我們將登入頁面省略

3.配置struts.xml文件,在配置前,需要說一下,配置自定義攔截器需要繼承struts默認提供的defaultStack,這樣真正意義的攔截器才能生效

攔截器要放在<package>中

<!-- 自定義攔截器 -->
		<interceptors>  
            <interceptor name="loginInterceptor" class="com.mo.filter.FilterLogin" />  
            <interceptor-stack name="loginDefaultStack">  
                <interceptor-ref name="loginInterceptor" />  
                <interceptor-ref name="defaultStack" />  <!-- 一定要依賴struts2的攔截器 -->
            </interceptor-stack>  
        </interceptors>  
		<!-- 自定義默認攔截器,包括struts2默認的攔截器 -->
		<default-interceptor-ref name="loginDefaultStack" />
		<!-- 全局 -->
		 <global-results>  
            <result name="loginUI" type="redirect">user_loginUI.action</result>  
        </global-results>  

4.當然我們的登入頁面是不需要被攔截的,所以我們只需要讓登入部分繼承struts默認的攔截器就行了

	<action name="user_*" class="userAction" method="{1}">
			<!-- 登錄頁面不用攔截,直接繼承struts2默認的攔截器 -->
			<interceptor-ref name="defaultStack" />
			<result name="OK" type="redirectAction">music_show.action</result>
			<result name="input">/jsp/login/login.jsp</result>
		</action>

5.完成,,,,,,在這裏我們要注意一點,我們攔截的只是.action的請求,對應.jsp,我們可以將jsp文件全部放到/WEB-INF/目錄下,這樣客戶端就不能通過路徑訪問到jsp文件,只能通過.action跳轉訪問!




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章