Spring Securityの実装で定義されたユーザー権限に従って、JSP/JSTLのフィールドを非表示にするのは簡単でした。 1つは簡単に次のように書くことができます:Spring Securityを使用したJSON REST API
<%-- Assume message.title requires no privilege -->
<c:out value="${message.title}" />
<%-- Assume message.text requires PRIV_READ_MESSAGE -->
<security:authorize ifAllGranted="PRIV_READ_MESSAGE">
<c:out value="${message.text}" />
</secrurity:authorize>
私の質問は、JSPを使用しない場合にこれを行う方法です。私の将来のプロジェクトでは、Angular JS、AJAXリクエスト、JSONレスポンスでプレーンなHTMLファイルを使いたいと思っています。例えば
、私はこのようなメッセージを返すためにAPIを作成することがあります。
GET /api/v1/message/{msgId}
ユーザーが権限PRIV_READ_MESSAGEを持っていない場合は、このAPIのJSONレスポンスは次のようになります:
{
"messageId": 123,
"title": "Sample Message 101"
}
ユーザーがその権限を持っている場合は、このAPIのJSON応答は以下のようになります。
{
"messageId": 123,
"title": "Sample Message 101",
"text": "Message Body will be included..."
}
私は、次の春のコントローラを実装しましたと仮定すると:私はログインしているユーザー十分な権限を持っているか、いない場合/他の順序で私のコントローラメソッドには、チェックする場合は追加しない
@RequestMapping(value = "api/v1/message/{messageId}", method = RequestMethod.GET)
public ResponseEntity<Message> getMessage(@PathVariable Long messageId) {
// use some magic code to fetch Message from DB
Message message = null;
return new ResponseEntity<>(message, HttpStatus.OK);
}
。ユーザー権限に従ってJSONレスポンスフィールドをどこかにフィルタリングできますか?
ThreadLocal変数を使用して現在のユーザーの権限を格納していると仮定できます。