日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

【Java】JavaWeb 登录检查及界面跳转

發布時間:2023/12/13 综合教程 22 生活家
生活随笔 收集整理的這篇文章主要介紹了 【Java】JavaWeb 登录检查及界面跳转 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

場景

  一般javaweb網站都有用戶登錄,而有一些操作必須用戶登錄才能進行,常見流程:用戶請求--》后臺判斷是否登錄--》沒登錄跳轉到登錄界面,登錄用戶正常操作

解決思路

  在用過濾器過濾請求,判斷是否登錄,如果未登錄,返回參數跳轉的登錄界面,登錄了的請求放行

具體實現

  新建一個web工,參考:【Maven】Eclipse 使用Maven創建Java Web項目
  新建一個LoginFilter過濾器類,繼承Filter類

 1 package com.test.login;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 import java.util.ArrayList;
 6 import java.util.List;
 7 
 8 import javax.servlet.Filter;
 9 import javax.servlet.FilterChain;
10 import javax.servlet.FilterConfig;
11 import javax.servlet.ServletException;
12 import javax.servlet.ServletRequest;
13 import javax.servlet.ServletResponse;
14 import javax.servlet.http.HttpServletRequest;
15 import javax.servlet.http.HttpServletResponse;
16 import javax.servlet.http.HttpSession;
17 
18 public class LoginFilter implements Filter {
19 
20     public static List<String> pattenURL = new ArrayList<String>();
21 
22     @Override
23     public void destroy() {
24         // TODO Auto-generated method stub
25 
26     }
27 
28     @Override
29     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
30             throws IOException, ServletException {
31 
32         HttpServletRequest httpRequest = (HttpServletRequest) request;
33         HttpServletResponse httpResponse = (HttpServletResponse) response;
34         HttpSession session = httpRequest.getSession();
35         // 登陸url
36         String loginUrl = httpRequest.getContextPath() + "/login.jsp";
37         String url = httpRequest.getRequestURI().toString();
38 
39         // 注:在pattenURL中的全部不攔截 url.indexOf(urlStr) > -1 表示urlStr在url中出現過,出現就不攔截
40         for (String urlStr : pattenURL) {
41             if (url.indexOf(urlStr) > -1) {
42                 chain.doFilter(request, response);
43                 return;
44             }
45         }
46 
47         //超時處理,ajax請求超時設置超時狀態,頁面請求超時則返回提示并重定向,session.getAttribute("")是獲取到登錄人的session信息
48         if (session.getAttribute("") == null) {
49             // 判斷是否為ajax請求
50             if (httpRequest.getHeader("x-requested-with") != null
51                     && httpRequest.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {
52                 httpResponse.addHeader("sessionstatus", "timeOut"); // 返回超時標識
53                 httpResponse.addHeader("loginPath", loginUrl);// 返回url
54                 chain.doFilter(request, response);// 不可少,否則請求會出錯
55             } else {
56                 // alert('會話過期,請重新登錄');
57                 String str = "<script language='javascript'>" + "window.top.location.href='" + loginUrl + "';</script>";
58                 response.setContentType("text/html;charset=UTF-8");// 解決中文亂碼
59                 try {
60                     PrintWriter writer = response.getWriter();
61                     writer.write(str);
62                     writer.flush();
63                     writer.close();
64                 } catch (Exception e) {
65                     e.printStackTrace();
66                 }
67             }
68         } else {
69             chain.doFilter(request, response);
70         }
71     }
72 
73     /**
74      * 過濾器初始化調用方法 在pattenURL中的全部不攔截,所以上面會使用:path.indexOf(urlStr) > -1
75      */
76     @Override
77     public void init(FilterConfig config) throws ServletException {
78         pattenURL.add("login.jsp");// 登錄jsp
79         pattenURL.add("login.do");// 登錄方法
80         pattenURL.add("css");// css
81         pattenURL.add("image");// image
82         pattenURL.add("js");// js
83         pattenURL.add("fonts");// fonts
84 
85     }
86 
87 }

  在web.xml中注冊過濾器

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
 5 
 6     <display-name>test-login</display-name>
 7 
 8     <!--登錄過濾器 -->
 9     <filter>
10         <description>登錄過濾器</description>
11         <filter-name>loginFilter</filter-name>
12         <filter-class>com.test.login.LoginFilter</filter-class>
13     </filter>
14     <filter-mapping>
15         <filter-name>loginFilter</filter-name>
16         <url-pattern>/*</url-pattern>
17     </filter-mapping>
18     
19     <welcome-file-list>
20         <welcome-file>index.jsp</welcome-file>
21     </welcome-file-list>
22     
23 </web-app>

  引入一個全局的js。用戶控制ajax請求,如果是ajax請求的話,跳轉到登錄界面。js代碼主要是真對所有ajax請求進行跳轉的,所以如果有的ajax不想被過濾攔截,則只需要寫上:global:false即可不被攔截到

 1 /*
 2 *說明:此處是調用ajax方法時,判斷session是否過期
 3 *
 4 *注:如果不想讓ajax方法受這個影響,可以在ajax方法中寫:global:false
 5 *如下:
 6 *$.ajax({
 7 *url:"test.html",
 8 *global:false//不觸發全局ajax事件
 9 *})
10 *
11 ***/
12 
13 $(document).ajaxComplete(function(event,xhr,settings){
14 if(xhr.getResponseHeader("sessionstatus")=="timeOut"){
15 if(xhr.getResponseHeader("loginPath")){
16 alert("登錄過期,請重新登錄...");
17 window.location.replace(xhr.getResponseHeader("loginPath"));
18 }else{
19 //alert("請求超時請重新登陸!");
20 }
21 }
22 });

總結

以上是生活随笔為你收集整理的【Java】JavaWeb 登录检查及界面跳转的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。