私は自分のプロジェクトでSpring Securityを実装しました。しかし、@ServiceにUserDetailsServiceを実装すると、メソッドのセキュリティアノテーションは無視されます。 このコードで何が問題になっていますか?@ServiceにUserDetailsServiceを実装するとメソッドのセキュリティが機能しない
@Transactional
public interface UserService extends UserDetailsService {
@PreAuthorize("hasRole('ROLE_SUPER')") /* it's ignored. */
void update(UserEditForm form);
@Override
User loadUserByUsername(String username) throws UsernameNotFoundException;
}
@Service
public class SimpleUserService implements UserService {
// ommitted
}
@Transactional
public interface SomeService{
@PreAuthorize("hasRole('ROLE_SUPER')") /* it's working fine */
void doSomething();
}
@Service
public class SimpleSomeService implements SomeService {
// ommitted
}
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
PasswordEncoder passwordEncoder;
@Autowired
UserService userService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userService).passwordEncoder(passwordEncoder);
}
// ommitted
}
ps:申し訳ありませんが十分な英語の知識がありません。
ユーザーが何らかの役割を果たす前に、承認しようとしています。 –
@Sam私は分かりません。どういう意味ですか? – hurelhuyag
認証オブジェクトを設定するときにユーザーが自分の役割を果たす(loadUserByUsernameメソッドでこれを行います)が、その前にそのメソッドを呼び出す場合は... @preAuthorizeをインターフェイスで使用しないでください –