서블릿 필터를 사용하여 수신 서블릿 요청 URL을 변경하는 방법
http://nm-java.appspot.com/Check_License/Dir_My_App/Dir_ABC/My_Obj_123
에
http://nm-java.appspot.com/Check_License?Contact_Id=My_Obj_123
?
업데이트 : 아래 BalusC의 단계에 따라 다음 코드를 생각해 냈습니다.
public class UrlRewriteFilter implements Filter {
@Override
public void init(FilterConfig config) throws ServletException {
//
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
String requestURI = request.getRequestURI();
if (requestURI.startsWith("/Check_License/Dir_My_App/")) {
String toReplace = requestURI.substring(requestURI.indexOf("/Dir_My_App"), requestURI.lastIndexOf("/") + 1);
String newURI = requestURI.replace(toReplace, "?Contact_Id=");
req.getRequestDispatcher(newURI).forward(req, res);
} else {
chain.doFilter(req, res);
}
}
@Override
public void destroy() {
//
}
}
관련 항목은 web.xml
다음과 같습니다.
<filter>
<filter-name>urlRewriteFilter</filter-name>
<filter-class>com.example.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>urlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
예상 결과로 서버 측 및 클라이언트 측 리디렉션을 모두 시도했습니다. BalusC 덕분에 효과가있었습니다!
관련 질문 : stackoverflow.com/questions/2723829/…
—
BalusC
어떤 버전의 서블릿 스펙을 사용하고 있습니까? 요청을 다른 버전으로 전달하는 방법
—
Romain Hippeau
이 포스트를보십시오 그것은 또한 당신이 원하는 것을하는 필터를 가지고 있습니다
—
Romain Hippeau
원래 URL에 매개 변수 (예 : nm-java.appspot.com/Check_License/Dir_My_App/Dir_ABC/My_Obj_123 ? ** param1 = A & param2 = B **)가 포함 된 경우 이러한 매개 변수도 다음 서블릿 / jsp로 전달됩니다. 원래 매개 변수를 제거하거나 바꾸는 방법을 찾지 못했습니다 (HttpServletRequestWrapper 만 사용). 어떤 아이디어 .. 업데이트 : 그것은 것 같다 http://ocpsoft.org/opensource/how-to-safely-add-modify-servlet-request-parameter-values/가 이 문제를 해결합니다.
—
Lopotun
감사합니다. URL 재 작성 및 암호화에 대한 예를 찾고있었습니다.
—
Aditya Yada