Struts 2 에서 로그 인 되 지 않 은 jsp 페이지 에 대한 차단 기능 을 자세히 설명 합 니 다.

Struts 2 에서 차단 기 는 모두 가 자주 사용 하지만 차단 기 는 action 만 차단 할 수 있 고 jsp 페이지 를 차단 할 수 없습니다.이 럴 때 좀 어색 하 다.이치 에 따 르 면 로그 인하 지 않 은 사용 자 는 login 인터페이스 만 볼 수 있 고 URL 을 입력 하여 인터페이스 전환 을 할 수 없다.이것 은 분명 불합리 하 다.Struts 2 에서 Filter 가 jsp 페이지 차단 을 실현 하 는 기능 을 소개 합 니 다.(관심 있 는 사람 은 Filter 필터 의 다른 용법 을 연구 할 수 있 습 니 다.필 터 를 이용 해도 action 차단 기능 을 실현 할 수 있 기 때 문 입 니 다)
다음은 코드 를 직접 올 리 고 보면 서 실현 절차 와 원 리 를 분석한다.
1.웹.xml 의 설정 정보:

<filter>  
  <filter-name>SessionInvalidate</filter-name>  
  <filter-class>com.tp.action.SessionCheckFilter</filter-class> //       class   
  <init-param>  
   <param-name>checkSessionKey</param-name> //session      key 
   <param-value>users</param-value>  
  </init-param>  
  <init-param>  
   <param-name>redirectURL</param-name> //         
   <param-value>/login.jsp</param-value>  
  </init-param>  
  <init-param>  
   <param-name>notCheckURLList</param-name> //      jsp 
   <param-value>/login.jsp</param-value>  
  </init-param>  
 </filter>  
 <filter-mapping>  
  <filter-name>SessionInvalidate</filter-name> //        
  <url-pattern>*.jsp</url-pattern>  
 </filter-mapping> 
여기 서 주의해 야 할 것 은:
1.필 터 는 가능 한 한 Struts 2 설정 코드 위 에 놓 아야 합 니 다.
2.Session Invalidate 에서*.jsp  설정 이 매우 중요 합 니 다.jsp 는 jsp 만 걸 러 내 는 인터페이스 에서 css,js,action 을 함께 걸 러 내지 않 는 다 고 밝 혔 다.만약/*라 고 쓰 면 모든 것 을 함께 걸 러 낼 것 이다.css,js,action 등 을 포함 합 니 다.그래서 이곳 은 반드시 자세히 보아 야 한다.
3.Session CheckFilter 필터 의 핵심 클래스:

package com.tp.action; 
import java.io.IOException;  
import java.util.HashSet;  
import java.util.Set;  
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;  
/** 
 *               ,     ,                 checkSessionKey       Session         
 * redirectURL        ,          ,URL    ContextPath notCheckURLList 
 *      URL  ,     ,   URL      ContextPath 
 */  
public class SessionCheckFilter implements Filter {  
 protected FilterConfig filterConfig = null;  
 private String redirectURL = null;  
 private Set<String> notCheckURLList = new HashSet<String>();  
 private String sessionKey = null;  
 @Override  
 public void destroy() {  
  notCheckURLList.clear();  
 }  
 @Override  
 public void doFilter(ServletRequest servletRequest,  
   ServletResponse servletResponse, FilterChain filterChain)  
   throws IOException, ServletException {  
  HttpServletRequest request = (HttpServletRequest) servletRequest;  
  HttpServletResponse response = (HttpServletResponse) servletResponse;  
  HttpSession session = request.getSession();  
  if (sessionKey == null) {  
   filterChain.doFilter(request, response);  
   return;  
  }  
  if ((!checkRequestURIIntNotFilterList(request))  
    && session.getAttribute("users") == null) {  
     response.sendRedirect(request.getContextPath() + redirectURL);  
   return;  
  }  
  filterChain.doFilter(servletRequest, servletResponse);  
 }  
 private boolean checkRequestURIIntNotFilterList(HttpServletRequest request) {  
  String uri = request.getServletPath()  
    + (request.getPathInfo() == null ? "" : request.getPathInfo());  
  String temp = request.getRequestURI(); 
  temp = temp.substring(request.getContextPath().length() + 1);  
  // System.out.println("    :"+uri+";"+notCheckURLList+"=="+notCheckURLList.contains(uri));  
  return notCheckURLList.contains(uri);  
 }  
 @Override  
 public void init(FilterConfig filterConfig) throws ServletException {  
  this.filterConfig = filterConfig;  
  redirectURL = filterConfig.getInitParameter("redirectURL");  
  sessionKey = filterConfig.getInitParameter("checkSessionKey");  
  String notCheckURLListStr = filterConfig  
    .getInitParameter("notCheckURLList");  
  if (notCheckURLListStr != null) {  
   System.out.println(notCheckURLListStr);  
   String[] params = notCheckURLListStr.split(",");  
   for (int i = 0; i < params.length; i++) {  
    notCheckURLList.add(params[i].trim());  
   }  
  }  
 }  
} 
여기까지 필터 의 기능 이 실현 되 었 다.웹.xml 에 설 정 된 정 보 를 다시 한 번 말씀 드 리 지만 필터 가 성공 하 는 지 확인 해 야 합 니 다.
총결산
본 고 는 Struts 2 에서 jsp 페이지 에 로그 인하 지 않 은 차단 기능 에 대한 상세 한 설명 은 여기까지 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.어서 오 세 요.  struts 2 개발 절차 및 상세 설정등.무슨 문제 가 있 으 면 언제든지 메 시 지 를 남 겨 도 됩 니 다.우리 에 대한 친구 들 의 지지 에 감사 드 립 니 다.

좋은 웹페이지 즐겨찾기