java 字符过滤器_Java Web---登录验证和字符编码过滤器
什么是過濾器?
在Java Web中,過濾器即Filter。Servlet API中提供了一個Filter接口(javax.servlet.Filter)。開發web應用時,假設編寫的Java類實現了這個接口,則把這個Java類稱之為過濾器Filter。
通過Filter技術,開發者能夠實現用戶在訪問某個目標資源之前,對訪問的請求和響應進行攔截。簡單說。就是能夠實現web容器對某資源的訪問前截獲進行相關的處理,還能夠在某資源向web容器返回響應前進行截獲進行處理。
創建一個Filter的步驟
1.創建一個Filter處理類(實現javax.servlet.Filter接口)
2.在web.xml文件里配置Filter
Filter運行流程
1.Filter對用戶的請求進行預處理
2.處理好后將請求交給Servlet處理并生成響應
3.最后Filter再對server響應進行后處理
字符編碼過濾器
CharacterFilter.java
package org.LabReserve.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class CharacterFilter implements Filter { //實現Filter接口
private String character; //保存字符編碼的類型
@Override
public void destroy() { //在Filter銷毀前。完畢某些資源的回收
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("utf-8"); //能夠直接設置編碼
servletResponse.setCharacterEncoding(character); //也能夠讀取初始化的參數character
filterChain.doFilter(servletRequest, servletResponse); //轉到下一個過濾器
}
@Override
public void init(FilterConfig fc) throws ServletException { //完畢Filter的初始化
//讀取web.xml中Filter配置的初始化參數
character = fc.getInitParameter("character");
}
}
web.xml文件里的配置
CharacterFilter
org.LabReserve.filter.CharacterFilter
character
utf-8
CharacterFilter
/*
登錄驗證過濾器
LoginFilter.java
package org.LabReserve.filter;
import java.io.IOException;
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 LoginFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
// 轉換為HTTP請求對象
HttpServletRequest request = (HttpServletRequest) servletRequest;
// 轉化為HTTP響應對象
HttpServletResponse response = (HttpServletResponse) servletResponse;
// 獲得請求相應的session對象
HttpSession session = request.getSession();
// 獲得用戶請求的URI
String path = request.getRequestURI();
// 不用驗證登錄過濾的頁面
String[] noCheckPages = { "index.jsp","findPassword.jsp",
"LoginServlet","UserServlet",
"css","images","js"};
// int indexOf(int ch) 返回指定字符在此字符串中第一次出現處的索引。沒找到則返回-1
for (int i = 0; i < noCheckPages.length; ++i) {
if (path.indexOf(noCheckPages[i]) > -1) {
// 轉到下一個過濾器
filterChain.doFilter(servletRequest, servletResponse);
return; //不再過濾,防止頁面重定向循環
}
}
// 假設session為null,說明用戶是第一次訪問
if (session.getAttribute("userId") != null
|| session.getAttribute("teacherId") != null
|| session.getAttribute("adminId") != null) {
// 轉到下一個過濾器
filterChain.doFilter(request, response);
} else {
// 又一次定向到首頁
response.sendRedirect("index.jsp");
return; //不再過濾,防止頁面重定向循環
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
web.xml文件配置
LoginFilter
org.LabReserve.filter.LoginFilter
LoginFilter
/*
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的java 字符过滤器_Java Web---登录验证和字符编码过滤器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于:Google Chrome 官方下
- 下一篇: javafx如何调节按钮位置_安全带高度