ユーザーが特定のページを表示する権限を持っていない場合に、コントローラーが正しい HTTP 応答コードを返すようにします。
5 に答える
投げるだけでもいい
org.springframework.security.access.AccessDeniedException("403 returned");
これにより、応答ヘッダーで 403 が返されます。
@ResponseStatusで注釈を付けた例外を作成します。たとえば、次のようにします。
@ResponseStatus(HttpStatus.FORBIDDEN)
public class ForbiddenException extends RuntimeException {
}
ハンドラー メソッドでその例外をスローするだけで、応答のステータスは 403 になります。
急ごしらえ
プレーンな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>
ユーザーログインメカニズムを実装する必要がある場合は、Spring Security(以前のAcegi Security)を参照してください。
を使用するのExceptionResolver
は良い方法ですが、これをビューに依存しないようにしたい場合はresponse.sendError(HttpServletResponse.SC_FORBIDDEN, "AdditionalInformationIfAvailable");
、コントローラーでを呼び出すことができます。
これを使用してください:
response.setStatus(403)
.