ProgramingTip

서블릿 필터에 여러 URL 패턴 제공

bestdevel 2020. 11. 4. 08:11
반응형

서블릿 필터에 여러 URL 패턴 제공


내 JSF 애플리케이션에서 서블릿 필터를 사용하고 있습니다. 내 응용 프로그램에 세 개의 웹 페이지 그룹이있는 내 서블릿 필터에서 다음 페이지에 대한 인증을 확인합니다.

내 폴더

/Admin/ *.xhtml

/Supervisor/*.xhtml
/Employee/*.xhtml

그리고 나는 다음 web.xml과 같이 쓰고 있다

<filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.ems.admin.servlet.LoginFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/Employee/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/Admin/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/Supervisor/*</url-pattern>
</filter-mapping>

하지만 같은 요청

http://localhost:8080/EMS2/faces/Html/Admin/Upload.xhtml

필터에 들어 가지 언어.

이 3 개의 폴더에 보안을 제공해야합니다.

이 문제를 해결하는 방법?


URL 패턴이 시작되는 경우 /루트에 최다입니다. /Admin/*URL 패턴만의 페이지와 일치합니다 http://localhost:8080/EMS2/Admin/*(즉, 즉 가정 할 /EMS2경로입니다),하지만 당신은 실제로 http://localhost:8080/EMS2/faces/Html/Admin/*당신의 URL 패턴이 일치하는 일이 없습니다.

URL 패턴에 다음과 /faces/Html같이 접두사를 가져야합니다 .

<url-pattern>/faces/Html/Admin/*</url-pattern>

또는 /faces/Html예를 들어 페이지를 열 수 있도록 URL 에서 경로를 제거 할 수 있도록 웹 프로젝트 구조 / 구성을 할 수도 있습니다 http://localhost:8080/EMS2/Admin/Upload.xhtml.

필터 매핑 구문은 모두 괜찮습니다. 그러나 여러 URL 패턴을 지정하는 더 간단한 방법은 <filter-mapping>여러 <url-pattern>항목이있는 하나만 사용하는 것 입니다 .

<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/faces/Html/Employee/*</url-pattern>
    <url-pattern>/faces/Html/Admin/*</url-pattern>
    <url-pattern>/faces/Html/Supervisor/*</url-pattern>
</filter-mapping>

필터 정의에 주석 메서드를 사용하는 경우 (에서 정의하는 것과 반대 web.xml), @WebFilter주석 에 매핑 배열을 추가하기 만하면 됩니다.

/**
 * Filter implementation class LoginFilter
 */
@WebFilter(urlPatterns = { "/faces/Html/Employee","/faces/Html/Admin", "/faces/Html/Supervisor"})
public class LoginFilter implements Filter {
    ...

그리고 FYI와 사용하는 서블릿을 사용하는 서블릿 작업이 수행됩니다.

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet({"/faces/Html/Employee", "/faces/Html/Admin", "/faces/Html/Supervisor"})
public class LoginServlet extends HttpServlet {
    ...

참고 URL : https://stackoverflow.com/questions/11645516/giving-multiple-url-patterns-to-servlet-filter

반응형