Example: Servlet filters
이 예제는 서블릿 필터를 이용하여 pre-login과 post-login 처리를 로그인 폼을 이용하여 처리하도록 하는 예제이다.
Servlet filter source code: LoginFilter.java
/**
* 서블릿 필터 예제 : 이 필터는 j_security_check와 사용자가 로그인을
* 수행하고자 할 경우 pre-login 액션을 수행할 수 있도록 하고, 로그인시
* 에러가 발생한 경우 브라우저 단으로 에러를 보내는 일을 수행한다.
*
* 이 필터는 init() 메소드에서 FilterConfig로부터 전달된 리스트 파일 이름을
* 호출하는 역할을 수행한다. 이것은 호출된 사용자 리스트 파일을 읽고
* 호출된 사용자 리스트를 생성하는 작업을 수행한다.
*
* doFilter 메소드는 호출된경우 사용자 로깅은 사용자 리스트에 이름이 존재하는지
* 검사를 수행한다.
*
*/
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class LoginFilter implements Filter {
protected FilterConfig filterConfig;
java.util.List revokeList;
/**
* init() : init() 메소드가 호출되면 필더가 생성된다.
* 필터가 생된후 첫번째로 j_security_check는 애플리케이션에서 호출된다.
*/
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
// read revoked user list
revokeList = new java.util.ArrayList();
readConfig();
}
/**
* destroy() : destroy() 메소드는 필터가 서비스를 벗어나는 경우 호출된다.
*/
public void destroy() {
this.filterConfig = null;
revokeList = null;
}
/**
* doFilter() : doFilter() 메소드는 서블릿이 호출되기 전에 필터에 매핑된
* 필터를 호출하도록 한다. 이 필더는 j_security_check와 매핑되어 있으며,
* 메소드는 j_security_check 액션 이전에 호출되어 전달된다.
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws java.io.IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
// pre login action
// get username
String username = req.getParameter("j_username");
// if user is in revoked list send error
if ( revokeList.contains(username) ) {
res.sendError(javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED);
return;
}
// call next filter in the chain : let j_security_check authenticate
// user
chain.doFilter(request, response);
// post login action
}
/**
* readConfig() : 사용자 리스트 파일을 호출하여 읽고, 사용자 리스트를 생성한다.
*/
private void readConfig() {
if ( filterConfig != null ) {
// get the revoked user list file and open it.
BufferedReader in;
try {
String filename = filterConfig.getInitParameter("RevokedUsers");
in = new BufferedReader( new FileReader(filename));
} catch ( FileNotFoundException fnfe) {
return;
}
// read all the revoked users and add to revokeList.
String userName;
try {
while ( (userName = in.readLine()) != null )
revokeList.add(userName);
} catch (IOException ioe) {
}
}
}
}
중요 : 이전 샘플 코드에서, public void doFilter(ServletRequest request 의 시작 라인이다. 이것은 2개의 라인으로 분리되어 보이는 것이다. 결국에는 한 라인이다.
web.xml 파일의 부분에 LoginFilter 설정과 매핑된 j_security_check을 확인하라.
<filter id="Filter_1">
<filter-name>LoginFilter</filter-name>
<filter-class>LoginFilter</filter-class>
<description>Performs pre-login and post-login operation</description>
<init-param>
<param-name>RevokedUsers</param-name>
<param-value>c:\WebSphere\AppServer\installedApps\
<app-name>\revokedUsers.lst</param-value>
</init-param>
</filter-id>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/j_security_check</url-pattern>
</filter-mapping>
An example of a revoked user list file:
user1
cn=user1,o=ibm,c=us
user99
cn=user99,o=ibm,c=us
이 예제는 서블릿 필터를 이용하여 pre-login과 post-login 처리를 로그인 폼을 이용하여 처리하도록 하는 예제이다.
Servlet filter source code: LoginFilter.java
/**
* 서블릿 필터 예제 : 이 필터는 j_security_check와 사용자가 로그인을
* 수행하고자 할 경우 pre-login 액션을 수행할 수 있도록 하고, 로그인시
* 에러가 발생한 경우 브라우저 단으로 에러를 보내는 일을 수행한다.
*
* 이 필터는 init() 메소드에서 FilterConfig로부터 전달된 리스트 파일 이름을
* 호출하는 역할을 수행한다. 이것은 호출된 사용자 리스트 파일을 읽고
* 호출된 사용자 리스트를 생성하는 작업을 수행한다.
*
* doFilter 메소드는 호출된경우 사용자 로깅은 사용자 리스트에 이름이 존재하는지
* 검사를 수행한다.
*
*/
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class LoginFilter implements Filter {
protected FilterConfig filterConfig;
java.util.List revokeList;
/**
* init() : init() 메소드가 호출되면 필더가 생성된다.
* 필터가 생된후 첫번째로 j_security_check는 애플리케이션에서 호출된다.
*/
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
// read revoked user list
revokeList = new java.util.ArrayList();
readConfig();
}
/**
* destroy() : destroy() 메소드는 필터가 서비스를 벗어나는 경우 호출된다.
*/
public void destroy() {
this.filterConfig = null;
revokeList = null;
}
/**
* doFilter() : doFilter() 메소드는 서블릿이 호출되기 전에 필터에 매핑된
* 필터를 호출하도록 한다. 이 필더는 j_security_check와 매핑되어 있으며,
* 메소드는 j_security_check 액션 이전에 호출되어 전달된다.
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws java.io.IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
// pre login action
// get username
String username = req.getParameter("j_username");
// if user is in revoked list send error
if ( revokeList.contains(username) ) {
res.sendError(javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED);
return;
}
// call next filter in the chain : let j_security_check authenticate
// user
chain.doFilter(request, response);
// post login action
}
/**
* readConfig() : 사용자 리스트 파일을 호출하여 읽고, 사용자 리스트를 생성한다.
*/
private void readConfig() {
if ( filterConfig != null ) {
// get the revoked user list file and open it.
BufferedReader in;
try {
String filename = filterConfig.getInitParameter("RevokedUsers");
in = new BufferedReader( new FileReader(filename));
} catch ( FileNotFoundException fnfe) {
return;
}
// read all the revoked users and add to revokeList.
String userName;
try {
while ( (userName = in.readLine()) != null )
revokeList.add(userName);
} catch (IOException ioe) {
}
}
}
}
중요 : 이전 샘플 코드에서, public void doFilter(ServletRequest request 의 시작 라인이다. 이것은 2개의 라인으로 분리되어 보이는 것이다. 결국에는 한 라인이다.
web.xml 파일의 부분에 LoginFilter 설정과 매핑된 j_security_check을 확인하라.
<filter id="Filter_1">
<filter-name>LoginFilter</filter-name>
<filter-class>LoginFilter</filter-class>
<description>Performs pre-login and post-login operation</description>
<init-param>
<param-name>RevokedUsers</param-name>
<param-value>c:\WebSphere\AppServer\installedApps\
<app-name>\revokedUsers.lst</param-value>
</init-param>
</filter-id>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/j_security_check</url-pattern>
</filter-mapping>
An example of a revoked user list file:
user1
cn=user1,o=ibm,c=us
user99
cn=user99,o=ibm,c=us
'WEB_Programming > Struts' 카테고리의 다른 글
EncodingFilter 로 한글 처리 하기 (2) | 2008.07.02 |
---|---|
로그인 필터 예제 (Redirect 처리) (0) | 2008.07.02 |
스트러츠 리소스 번들 이용방법 (0) | 2008.07.01 |
Struts 프레임워크 적용 구조 (0) | 2008.06.17 |
6.2 Installation (0) | 2008.06.13 |