3

SpringSecurityの使用3.1.3.RELEASE

したがって、ロールのリスト(10以上)があり、1つだけがSpringControllerメソッドにアクセスするのをブロックする必要がある場合。これはSpringExpressionLanguageを使用して行うことができ、非常に受け入れられているそれぞれの役割をリストすることを避けられますか?

たとえば、Not記号を含めることによって。

@PreAuthorize( "!hasRole('ROLE_FREE_USER')")

このようなすべての役割を一覧表示する

@PreAuthorize( "hasAnyRole('ROLE_ADMIN'、'ROLE_PAID_USER'、'ROLE_PREM_USER'、...)

ここでドキュメントを見てきました:http ://static.springsource.org/spring-security/site/docs/3.0.x/reference/el-access.html

しかし、NOTEQUALの場合には何もないようです。誰かが同様の問題に直面していますか?

4

2 に答える 2

3

否定記号 ( !) が Spring Expression Language (SPEL) でサポートされていることは確かです。当然、boolean結果が返ってきます。

公式ドキュメントの例:

// evaluates to false
boolean falseValue = parser.parseExpression("!true").getValue(Boolean.class);

// -- AND and NOT --
String expression =  "isMember('Nikola Tesla') and !isMember('Mihajlo Pupin')";
boolean falseValue = parser.parseExpression(expression).getValue(societyContext, Boolean.class);
于 2013-01-10T22:37:11.327 に答える
0

この場合、Spring Expression Language は機能しませんでした。最初に私は以下で試しました、

@RequestMapping("/post/edit")
        @PreAuthorize("hasRole('ROLE_OWNER') AND !hasRole('ROLE_ADMIN')")
        public String editPost(Model model, Principal principal,  HttpServletRequest request, @RequestParam("postId") String postId) {
    }

ただし、ユーザーが管理者権限を持っている場合は、メソッド内から役割を再確認し、ページをリダイレクトする必要がありました。

@RequestMapping("/post/edit")
    @PreAuthorize("hasRole('ROLE_OWNER')")
    public String editPost(Model model, Principal principal,  HttpServletRequest request{

        //Admin Users does not have access to post edit page
        if (request.isUserInRole("ROLE_ADMIN")) {
            return TemplateNamesConstants.POST_WALL;
        }
}

より良い/代替ソリューションを見つけた場合に備えて、このスレッドを更新してください。

于 2019-09-09T11:47:07.940 に答える