2017-05-14 10 views
4

私は基本的なSpringBootアプリケーションを持っています。 Spring Initializer、組み込みTomcat、Thymeleafテンプレートエンジン、およびパッケージを実行可能なJARファイルとして使用しています。@RolesAllowedと@PreAuthorizeと@Securedの比較

私は、コントローラを確保したい:

@Controller 
@RequestMapping("/company") 
@RolesAllowed({"ROLE_ADMIN"}) 
@PreAuthorize("hasRole('ADMIN')") 
@Secured("ADMIN") 
public class CompanyController { 
} 

私は別の選択肢があることを知っているが、私は本当に私が

答えて

3

@Secured@RolesAllowedは春に同じ機能を実行します。@PreAuthorize注釈を使用すると、コンフィギュレーション・クラスを定義する必要があります動作するために

も注意してください。違いは@SecuredがSpring固有のアノテーションであり、@RolesAllowedがJava標準アノテーション(JSR250)である点です。これらのアノテーションのいずれもSpELをサポートしていません。

@PreAuthorizeは、別のSpring固有の注釈です。 @PreAuthorizeでSpELを使用すると、さらに強力な操作を実行できます。ロール/パーミッション、現在の認証されたユーザー、およびメソッドに渡された引数に基づいて、limitメソッド呼び出しの式を記述できます。使用するための


http://docs.spring.io/autorepo/docs/spring-security/4.0.x/reference/html/el-access.html#el-common-built-in

@PreAuthorize("hasRole('ADMIN') or #user.id == authentication.name") 
public void deleteUser(User user) { 
    ... 
} 

、それはあなた次第です、本当に。 @Secure@PreAuthorizeはあなたのコードをSpringに結びつけます。 Springと関連している場合は問題ではない、またはより強力な操作を実行する必要がある場合は、 @PreAuthorizeを使用してください。

2

これらのすべて基本的にあなたのための同じを使用すべきか分かりませんコントローラーとコントローラーの方法には、@PreAuthorizeが最適です。 @Securedおよび@RolesAllowedは、サービスレイヤのセキュリティ属性を記述するためのものです。

@Configuration 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration { 
... 
} 
関連する問題