Spring MVC で 403 Forbidden を返すにはどうすればよいですか?
質問
ユーザーに特定のページを表示する権限がない場合に、コントローラーが正しい HTTP 応答コードを返すようにしたいと考えています。
解決
急遽
(最も一般的なように) プレーンな JSP ビューを使用している場合は、次のコードを追加するだけです。
<% response.setStatus( 403 ); %>
ビューファイルのどこかに。頂上は素敵な場所です。
詳細
MVC では、これを常にビューで設定しますが、Spring-MVC ではほとんどの場合、 SimpleMappingExceptionResolver
スローされたランタイム例外に応答して正しいビューを表示します。
例えば:を作成して投げる PermissionDeniedException
コントローラーまたはサービス層で、例外リゾルバーがビュー ファイルを指すようにします。 permissionDenied.jsp
. 。このビュー ファイルは 403 ステータスを設定し、ユーザーに適切なメッセージを表示します。
Spring Bean XML ファイルでは次のようになります。
<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>
ユーザー ログイン メカニズムを実装する必要がある場合は、以下を参照してください。 スプリングセキュリティ (旧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)
.