Spring 攔截器的配置及 filter 的寫法
阿新 • • 發佈:2019-02-14
今天配置了一個Spring 的攔截器,主要是為了在瀏覽器訪問一部分頁面的時候,如果沒有對應的session,則返回驗證頁面。
1、首先,在web.xml 檔案裡面新增以下配置。
2、JspFilter 攔截器方法 例項<filter-name>jspFilter</filter-name> <filter-class>com.util.sms.JspFilter</filter-class> //這裡指攔截器所在的位置 <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> //設定攔截器返回的編碼 </init-param> </filter> <filter-mapping> <filter-name>jspFilter</filter-name> <url-pattern>/helpfile/*</url-pattern> //這裡設定的意思是:在進行http 請求的時候,連結只要是訪問包含/helpfile的,都會進入攔截器 </filter-mapping>
package com.util.sms;
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;
public class JspFilter implements Filter{
private static String encoding;
private static final String DEFAULT_CHARSET="UTF-8";
public JspFilter() {}
public void destroy() {}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession();
System.out.println("過濾器設定字元編碼"+encoding);
request.setCharacterEncoding(encoding);
// 如果session不為空,則可以瀏覽其他頁面
String url = request.getServletPath();
System.out.println(url);
//這裡判斷目錄,字尾名,當然也可以寫在web.xml中,用url-pattern進行攔截對映
if ((!request.getServletPath().equals("/helpfile"))) {
System.out.println(request.getServletPath());
//session.getAttribute("userInfo") == null
if (null == request.getSession().getAttribute("tUser")) {
session.invalidate();
response.setContentType("text/html;charset=gb2312");
PrintWriter out = response.getWriter();
out.println("<script language='javascript' type='text/javascript'>");
out.println("alert('請驗證您的手機號碼之後,進行檢視!');window.location.href='" + request.getContextPath() + "/help.jsp'");
out.println("</script>");
} else {
chain.doFilter(request, response);
}
} else {
chain.doFilter(request, response);
}
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
System.out.println("過濾器設定字元編碼sssssssssssssss");
encoding = fConfig.getInitParameter("encoding");
}
}
以上程式碼段中主要的攔截部分是在紅色程式碼部分,實現的邏輯主要是在不存在session的時候,則返回help.jsp 頁面。
配置完成之後,訪問連結中包含 /helpfile 的連結的時候,就會進入攔截器。
僅僅是本人做為簡單的記錄,歡迎大家提意見。