UPDATE(17.04.2012):私は結果として何を持っていますか。@PreAuthorizeのカスタムクラスプリンシパル
ルートのcontext.xml:
<context:annotation-config/>
<context:component-scan base-package="com.grsnet.qvs.controller.web"/>
<security:global-method-security pre-post-annotations="enabled" />
<bean id="permissionManager" class="com.grsnet.qvs.auth.PermissionManager"/>
PermissionManager.java
package com.grsnet.qvs.auth;
import com.grsnet.qvs.model.Benutzer;
public class PermissionManager {
public PermissionManager() {}
public boolean hasPermissionU01(Object principal, Integer permissionLevel) {
return ((Benutzer)principal).getPermission().getU_01() >= permissionLevel;
}
}
コントローラー:
@PreAuthorize("@permissionManager.hasPermissionU01(principal, 1)")
@RequestMapping(value = "/u01", method = RequestMethod.GET)
public String listU01(HttpServletRequest request, Map<String, Object> map) throws Exception {
setGridFilters(map);
return "u01panel";
}
は、私がPermissionManager.hasPermissionU01にブレークポイントを設定します。私のセキュリティ注釈は無視されたようです。
理由は何ですか?私のミスはどこですか?
ありがとうございました。 UPDATE
OF
END私はここで聞いているグーグルの時間後。 私は
- は、Spring MVCのアプリ
- CustomUserDetailService
カスタムUserDetailsクラス
public class Benutzer extends User implements UserDetails { ... private Permission permission = null; ... }
権限クラス、非常に良いではありません実現していますが、私はそれを使用する必要があります。
public class Permission { ... private Integer u_01 = 0; ... }
コントローラ
@Controller public class U01Controller { @RequestMapping(value = "/u01", method = RequestMethod.GET) public String listU01(HttpServletRequest request, Map<String, Object> map) throws Exception {
マイタスク全体でコントローラを確保し、内部の方法を確保するためです。 私はこのようないくつか書きたいと思います:
@PreAuthorize("principal.permission.u_01>0")
public class U01Controller {
と
@RequestMapping(value = "/u01", method = RequestMethod.GET)
@PreAuthorize("principal.permission.u_01=2")
public String listU01(HttpServletRequest request, Map<String, Object> map) throws Exception {
ACL、プリンシパルへのアクセスを得るためにUserDetailsインターフェースを使用しているようだが。 ACLの中に型キャストするのはおそらくですか?
@PreAuthorize("(com.grsnet.qvs.model.Benutzer)principal.permission.u_01=2")
ありがとうございます。
ええ、興味深い... @PreAuthorize( "Decision.mayList(principal)> 1")のようなものを書くことができますか?ありがとう。 – mad
もちろん、あなたは_could_、しかし、私は複数のメソッドを持っていると思います。つまり、決定全体がこの方法に含まれます。私は、自明ではないシステムでは、ビジネス・メソッド間で少なくともいくつかの決定を再利用し、それらをある場所で正しいものにすることは保守性にとって非常に貴重なものであると確信しています。 。 –
よろしいですか?私は後で試してみて、あなたの答えを受け入れるか、あなたにaddititonallyを尋ねるでしょう。ありがとう。 – mad