JavaWeb過濾器實現頁面跳轉至登錄頁面


需求說明:

  1、用戶登錄某頁面一段時間之內,如果無任何操作,跳轉至登錄頁面。

  2、用戶在非登錄狀態下,無法訪問項目下的某些頁面。

解決方式:

  通過session過濾器實現對請求的過濾,如果未登錄跳轉至登錄頁面,如果已登錄直接放行。在過濾器中不對登錄頁面進行過濾,不對css、js、img資源進行過濾。

如果不是前面說的兩種資源,則判斷記錄用戶信息的session是否為空,空則跳轉至登錄頁面、非空則放行。

 

方法一:Java過濾器實現(推薦)

解決步驟:

步驟一:在項目下配置web.xml文件中配置session

  1、設置session失效時間(時間單位為分鍾)

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

  2、配置過濾器

<filter>
    <description>session過濾器</description>
    <filter-name>sessionFilter</filter-name>
    <filter-class>com.filter.SessionFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>sessionFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

 注意:這里對所有的請求都進行了過濾。也可以在配置過濾器的時候設置某些請求不進行過濾,這里不進行具體的介紹。

步驟二:編寫過濾器類

package com.filter;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.model.user.User;public class SessionFilter implements Filter {

    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        res.addHeader("Access-Control-Allow-Origin", "*");
        String uri = req.getRequestURI();if (uri.indexOf("login") != -1 || uri.indexOf("Login") != -1) {
            chain.doFilter(req, res);

        } else if ((uri.contains(".css") || uri.contains(".js") || uri.contains(".jpg") || uri.contains(".png")
                || uri.contains(".jpng") && !uri.contains(".jsp")) {
            chain.doFilter(req, res);
        } else {
            HttpSession session = req.getSession();
            User user = (User) session.getAttribute("user");
            String username = "";
            if (user != null && !user.equals("")) {
                username = user.getLoginName();
            }
            if (username != "" && username != null) {
                chain.doFilter(req, res);
            } else {
                session.invalidate();
                res.setContentType("text/html;charset=utf-8");
                PrintWriter out = res.getWriter();
                out.println("<script language='javascript' type='text/javascript'>");
                out.println("window.top.location.href='" + req.getContextPath() + "/jsp/login.jsp'");
                out.println("</script>");
            }
        }

        if (uri.indexOf("redirect") != -1) {
       
if (null != request.getParameter("userimg")) { chain.doFilter(req, res); } } } public void destroy() {
} }

  注意:1、這里使用window.top.location.herf,如果使用window.location.herf有時候無法完成跳轉。2、上面的代碼執行時需要用戶在登錄時將用戶信息放入session中。

方法二:Jsp頁面Java代碼實現(了解)

  完成方法一的步驟就可以實現一個session過濾器了,過濾器會對請求想要訪問的頁面進行進行請求判斷。如果我們只想對某一個頁面進行session判斷又不想使用過濾器,可以在頁面上使用java代碼進行判斷。

注意這里只對某一個特定的頁面,其他頁面是不能用的。

<%    
       if(session.getAttribute("user") == null) {      
%>    
       <script type="text/javascript" language="javascript">  
          top.location.href="<%=basePath%>jsp/login.jsp";  
       </script>   
 <%    
      }    
 %>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM