Spring MVC で 403 Forbidden を返すにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/45546

  •  09-06-2019
  •  | 
  •  

質問

ユーザーに特定のページを表示する権限がない場合に、コントローラーが正しい 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).

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top