LoginSignup
0
4

More than 5 years have passed since last update.

[Java][Spring] Spring Securityのアノテーションを付けたら、Type MismatchでAutowireできないときの対処方法

Posted at

背景

Spring Securityのメソッドアノテーションでアクセス制御したいと思いました。

既存のクラスにアノテーションを付けました。

MyService.java
@Component
public class MyService {

    @PreAuthorize("hasRole('ROLE_ADMIN')")
    public void someAdminAction() {
        /* ... */
    }
}

アノテーションを有効にするためにコンフィグレーションクラスを作りました。

MethodSecurityConfiguration.java
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfiguration {

}

MyServiceはコントローラにインジェクションしていました。

MyController.java
@RestController
public class MyController {

    @Autowired
    private MyService myService;

    /* ... */
}

起きたこと

MyControllerにMyServiceをインジェクションできない!

なんかType Mismatchとかいってる!!

原因

アノテーションを付けたクラスはAOPしてプロキシになるので、型が変わっている(?)みたいです。

解決策

proxyTargetClass = trueというオプションを追加しました。

MethodSecurityConfiguration.java
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true, proxyTargetClass = true)
public class MethodSecurityConfiguration {

}
0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4