웹 응용 프로그램에서 omnifaces extensionless URL을 사용하고 있습니다. omnifaces 무한 URL과 함께 사용할 때 필터가 작동하지 않습니다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<context-param>
<param-name>org.omnifaces.FACES_VIEWS_SCAN_PATHS</param-name>
<param-value>/*.xhtml</param-value>
</context-param>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>Login.xhtml</welcome-file>
</welcome-file-list>
</web-app>
내 필터 제공자 라이선스 계약
아래로입니다 아래와 같이내 web.xml 파일은
@WebFilter(filterName = "AuthFilter", urlPatterns = { "*.xhtml" })
public class AuthenticationFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
HttpSession ses = req.getSession(false);
String reqURI = req.getRequestURI();
System.out.println(reqURI);
if (reqURI.indexOf("/Login") >= 0
|| (ses != null && ses.getAttribute("user") != null)
|| (reqURI.indexOf("/ForgotPassword") >=0)
|| reqURI.contains("javax.faces.resource")) {
if ((reqURI.indexOf("/Login") >= 0 || (reqURI.indexOf("/ForgotPassword") >=0))
&& (ses != null && ses.getAttribute("user") != null)) {
System.out.println("Invalidating session");
ses.invalidate();
}
chain.doFilter(request, response);
} else {
res.sendRedirect(req.getContextPath() + "/Login");
}
} catch (Throwable t) {
System.out.println(t.getMessage());
}
} // doFilter
}
내 요구 사항은 사용자가 로그인되어있는 경우를 제외하고 모든 페이지에 그를 리디렉션이다 로그인 및 비밀번호 잊어 버리기 페이지. 사용자가 로그인하여 해당 페이지 중 하나에 액세스하려고 시도하면 그를 로그 아웃하고 요청한 페이지로 보냅니다. 사용자가 로그인하지 않은 경우 로그인 및 ForgotPassword 페이지에 대한 모든 요청이 허용되어야하며 다른 페이지에 액세스하면 로그인 페이지로 리디렉션되어야합니다.
내가 직면 한 문제는 확장없는 URL을 사용하면 .xhtml 파일 확장명을 포함하거나 포함하지 않는 페이지에 액세스 할 수 있다는 것입니다. 필터는 확장 프로그램을 사용하여 액세스 할 때만 호출됩니다. 확장자가 없으면 필터가 바이 패스됩니다.
모든 요청을 처리하기 위해 필터 클래스에 제공 할 URL 패턴을 모르겠습니다.
친절히 도움. FacesServlet
에 첨부,
@WebFilter(urlPatterns = "/*")
또는 :
첫 번째 패턴이 효과가있었습니다. 고맙습니다 . – Adarsh