Java 서블릿에서 리디렉션 문제가 있습니다. 302 대신 Status 401 (Not Authenticated)을 사용하고 싶습니다.Java 서블릿 리디렉션 (상태 401 포함)
URL이 보호 된 리소스가 "/ protected"라고 가정 해 보겠습니다. 이 Url은 ProtectedServlet에 매핑됩니다. ProtectedServlet의 doGet에서 요청이 인증되었는지 아닌지를 확인하고 그렇지 않으면 서블릿이 요청을 Login 페이지로 리디렉션합니다.
ProtectedServlet.java 나는 "WAY1"를 사용한 경우
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
boolean isAuth = this.checkAuth();
if (isAuth == false) {
// WAY1
resp.setStatus(401);
resp.sendRedirect(resp.encodeRedirectURL(loginUrl));
// WAY2
resp.setStatus(401);
resp.setHeader("Location", resp.encodeRedirectURL(loginUrl));
}
}
결과
내가, 내가 LOGIN 볼 것 "보호 /"요청할 때, 다음은 내 코드입니다 페이지 하지만 반환 상태는 내가 예상 한대로 302가 아니라 401입니다.
WAY2를 사용하는 경우 : "/ protected"를 요청하면 로그인 페이지가 표시되지 않습니다. 상태가 표시되지 않은 EMPTY 페이지가 표시됩니다.
누구나 내가 뭘 잘못했는지 알아? 감사.
[sendRedirect는 결과 코드를 302로 설정] (http://docs.oracle.com/javaes/7/api/javax/servlet/http/HttpServletResponse.html#sendRedirect%28java.lang.String%29) so 방법 1의 결과를 설명합니다. 방법 2의 경우 브라우저가 오류 코드를 수신 한 후 리디렉션을 따르도록 요구하며, 이것이 작동해야하는지 여부는 알지 못합니다. 방법 1은 당신에게 용납되지 않습니다. – fvu
WAY1은 작동하지만 보호 된 리소스에 액세스하고 있으며 우리가 401 상태를 받아야하므로 인증되지 않았기 때문에 올바른지 생각합니다. 그 맞습니까? – Loc
@Loc SotiriosDelimanolis가 제안하는 것은 실행 가능한 솔루션 일 수도 있고 오류 페이지를 통한 홉 (후자는 사용자가 그러한 종류의 사용자 지원을 요구할 경우 사용자에게 확장 된 지침과 연락처 정보를 제공 할 수 있습니다) – fvu