Filter 설명, 실행 순서, 인스턴스
29036 단어 filter
"Filter는 서브렛의""변종""으로 간주할 수 있으며, 주로 사용자 요청을 사전 처리하거나 Http서브렛 Response를 후처리하는 데 사용되는 전형적인 처리 체인입니다."서브렛과 다른 점은 사용자에게 직접 응답을 생성할 수 없다는 것입니다.전체 프로세스는 Filter가 사용자 요청을 미리 처리한 다음 Servlet에 요청을 전달하여 응답을 생성하고 마지막으로 Filter가 서버 응답을 나중에 처리하는 것입니다.
Filter는 다음과 같은 몇 가지 용도가 있다.
4
4
4
4
Filter에는 다음과 같은 몇 가지 종류가 있습니다.
4
4
4
4
4
Filter를 생성하려면 다음 두 단계를 수행합니다.
4
다음은 모든 사용자의 요청을 차단하고 요청한 정보를 로그에 기록하는 간단한 기록 로그를 소개합니다.
LogFilter 필터 클래스
package com.ljq.servlet;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public class LogFilter implements Filter {
// FilterConfig Filter
private FilterConfig config;
//
public void init(FilterConfig config) {
this.config = config;
}
//
public void destroy() {
this.config = null;
}
//
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// --------- ---------
// ServletContext ,
ServletContext context = this.config.getServletContext();
long before = System.currentTimeMillis();
System.out.println(" ...");
// HttpServletRequest
HttpServletRequest hrequest = (HttpServletRequest) request;
//
context.log("Filter : " + hrequest.getServletPath());
// Filter ,
chain.doFilter(request, response);
// --------- ---------
long after = System.currentTimeMillis();
//
context.log(" ");
//
context.log(" " + hrequest.getRequestURI() + " : "
+ (after - before));
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>com.ljq.servlet.LogFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
위 프로그램은doFilter () 방법을 실현했습니다. 이 방법을 실현하면 사용자의 요청을 미리 처리할 수도 있고, 서버 응답을 후처리할 수도 있습니다. 이들의 경계선은chain을 호출했는지 여부입니다.doFilter (), 이 방법을 실행하기 전에 사용자 요청을 미리 처리합니다.이 방법을 실행하면 서버 응답을 후처리합니다.
위의 요청Filter에서 요청한 URL만 로그에 기록하고 모든 요청에 chain을 실행합니다.doFilter (request,reponse) 방법은 Filter가 요청을 필터한 후에도 요청을 목적 주소로 보냅니다.사용 권한을 확인하려면 Filter에서 사용자가 요청한 HttpSession에 따라 사용 권한이 충분한지 여부를 판단할 수 있습니다.권한이 부족하면, 직접 호출해서 방향을 바꾸면 됩니다. chain을 호출할 필요가 없습니다.doFilter 방법.
다음은 인스턴스입니다.
package com.ljq.servlet;
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.HttpSession;
public class AuthorityFilter implements Filter {
private FilterConfig config;
//
public void init(FilterConfig config) {
this.config = config;
}
//
public void destroy() {
this.config = null;
}
//
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// Filter
String encoding = config.getInitParameter("encoding");
String login = config.getInitParameter("login");
// request
request.setCharacterEncoding(encoding);
HttpServletRequest req = (HttpServletRequest) request;
HttpSession session = req.getSession();
//
String requestPath = req.getServletPath();
// session user null,
// ,
if (session.getAttribute("user") == null
&& !requestPath.endsWith(login)) {
// forward
request.setAttribute("tip", " ");
request.getRequestDispatcher(login).forward(request, response);
}
//
else {
chain.doFilter(request, response);
}
}
}
위의 FilterdoFilter 방법에서 2줄 사체 코드는 Filter의 설정 파라미터를 가져오는 데 사용되고 프로그램의 굵은 글자 코드는 이 Filter의 핵심이다. ①번호 코드는 설정 파라미터에 따라 Request 인코딩에 사용되는 문자 집합을 설정한다. 다음 굵은 글자 코드는session 범위 내에user 속성이 있는지 판단한다. 이 속성이 없으면 로그인이 없다고 여긴다. 만약에 로그인이 없다면그리고 요청 주소도 로그인 페이지가 아니어서 시스템은 로그인 페이지로 바로 이동한다.
웹에서.xml 파일에서 이 Filter를 설정하고 init-param 요소를 사용하여 이 Filter 설정 파라미터를 설정합니다. init-param은 다음과 같은 두 개의 하위 요소를 받아들일 수 있습니다.
param-name: 매개변수 이름을 지정합니다.
param-value: 매개 변수 값을 지정합니다.
Filter 구성 세그먼트는 다음과 같습니다.
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- Filter -->
<filter>
<filter-name>authority</filter-name>
<filter-class>com.ljq.servlet.AuthorityFilter</filter-class>
<!-- 3 init-param 3 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>login</param-name>
<param-value>/login.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>authority</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
위 설정 세션의 굵은 글자 코드는 Filter에 두 개의 설정 파라미터를 지정하고,login을/login으로 지정합니다.jsp, 이것은 이 응용 프로그램에 로그인하지 않으면 일반 사용자는/login에만 접근할 수 있음을 나타냅니다.jsp.사용자가 이 응용 프로그램에 로그인한 후에만 다른 페이지에 자유롭게 접근할 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
조건자로 필터링프로그래밍에서 컬렉션이 있을 때 요구 사항을 충족하는 부분을 필터링하고 나머지는 버려야 하는 경우가 있습니다. 자세한 예는 환자 기록 목록이 있고 미성년 환자 목록을 가져오려는 경우입니다. 이 코드를 자바 파일에 복...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.