2

私たちのプロジェクトでは、xml と注釈ベースの spring mvc セキュリティ構成を混在させています。かなりの数の役割、多数の管理者がおり、誰が何を実行できるかについて頻繁に変更される要件があります。このようなパーミッション マトリックスを生成する util クラスがあればいいと思いました。

これまでに行ったことは、 @Controllerでマークされたすべてのクラスを検索し、 @PreAuthorize の値を抽出する単純なクラスパス スキャナーを作成することです。コントローラーの命名規則は単純です。{Action}{Type}Controller (例: NewOrderController) であるため、人間が (プログラマーでなくても) 読み取り可能な csv ファイルを簡単に生成できます。

問題は、注釈のクラスパス スキャンが、xml 構成で取得したものをカバーしていないことです。

spring mvc 自体によるアクセス解決に使用されるメタデータを照会する他の方法があるかどうか疑問に思っていました。

編集

xml 構成の例 (大幅に簡略化):

<security:http pattern="/static/**" security="none" />

<security:http auto-config="false"
               use-expressions="true"
               entry-point-ref="entryPoint"
               security-context-repository-ref="securityContextRepository">
    <security:intercept-url pattern="/product/**" access="hasAnyRole('PRODUCT_USER')" />
    <security:intercept-url pattern="/admin/**" access="hasAnyRole('ADMIN_USER')" />
    <!-- No security configuration for /order/** -->
</security:http>

アノテーション駆動構成の例:

@Controller
@RequestMapping("/order/new/{id}")
public class NewOrderController {

    @Autowired
    public NewOrderController() {
    }

    @RequestMapping(method = RequestMethod.GET)
    @PreAuthorize("hasRole('ORDER_USER')")
    public ModelAndView display() {
        return new ModelAndView(/*...*/);
    }

    @RequestMapping(method = RequestMethod.POST)
    @PreAuthorize("hasRole('ORDER_USER')")
    public RedirectView process() {
        return new RedirectView(/*...*/);
    }

}
4

1 に答える 1

1

この回答は、構成された役割を収集するために、URLインターセプターのメタデータを解析してロードするソリューションを構築するのに役立つと思います。

于 2012-06-07T07:47:25.077 に答える