어떻게 반환 403Forbidden in Spring MVC?
문제
내 컨트롤러 반환하는 오른쪽 HTTP 응답 코드를 사용자가 부족할 권한을 특정 페이지입니다.
해결책
퀵
사용하는 경우에는 일반 JSP 망(로는 것이 가장 일반적),단순히 추가
<% response.setStatus( 403 ); %>
어딘가에서 볼일이다.맨 위에는 좋은 장소입니다.
세부사항
MVC,나는 항상 설정에서 이 보고에서 대부분의 경우 봄-MVC,사용 SimpleMappingExceptionResolver
를 존재하는 올바른 뷰에서 응답을 던진 런타임 예외는 아니다.
예를 들어:를 만들고 throw PermissionDeniedException
컨트롤러에서 또는 서비스 계층과 예외를 해결점을 파일 보기 permissionDenied.jsp
.이 보는 파일로 설정합 403 상태 및 표시 사용자는 적절한 메시지입니다.
에서 당신의 봄 콩 XML file:
<bean id="exceptionResolver"
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="PermissionDeniedException">
rescues/permissionDenied
</prop>
... set other exception/view mappings as <prop>s here ...
</props>
</property>
<property name="defaultErrorView" value="rescues/general" />
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
를 구현해야 하는 경우 사용자가 로그인 메커니즘을 살펴보 Spring Security (이전 Acegi 보안).
다른 팁
수도 있습을 그냥 버
org.springframework.security.access.AccessDeniedException("403 returned");
이를 반환하 403 에서 응답 헤더가 있습니다.
예외를 만들로 주석 @ResponseStatus 예:다음과 같다:
@ResponseStatus(HttpStatus.FORBIDDEN)
public class ForbiddenException extends RuntimeException {
}
지금 바로 던지는 예외에서 당신의 처리기법 및 응답이 있는 상태 403.
를 사용하는 ExceptionResolver
는 좋은 방법입니다,하지만 당신이 원하는 것을 볼 수-독립적이,당신은 확실히 전화 response.sendError(HttpServletResponse.SC_FORBIDDEN, "AdditionalInformationIfAvailable");
에서 컨트롤러입니다.
이것을 사용:response.setStatus(403)
.