MongoDBでSpringセキュリティを使用し(Springデータを使用)、Springセキュリティのために自分のデータベースからユーザーを取得したいと考えています。しかし、私のuserserviceタイプはサポートされていないようですので、それはできません。
これは私のUserServiceクラスです:
public class UserService {
private ApplicationContext applicationContext;
private MongoOperations mongoOperations;
public UserService() {
applicationContext = new AnnotationConfigApplicationContext(MongoConfig.class);
mongoOperations = (MongoOperations) applicationContext.getBean("mongoTemplate");
}
public User find(String username) {
return mongoOperations.findOne(Query.query(Criteria.where("username").is(username)), User.class);
}
}
そして私のSecurityConfigクラス:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
UserService userService;
@Autowired
public void configAuthBuilder(AuthenticationManagerBuilder builder) throws Exception {
builder.userDetailsService(userService); //THIS DOES NOT WORK
builder.inMemoryAuthentication().withUser("username").password("password").roles("USER");
}
}
私がコメントした行は言う:
The inferred type UserService is not a valid substitute for the bounded parameter <T extends UserDetailsService>.
自分のデータベースからユーザーを取得できるように、どうすれば修正できますか?
サービス層
別のservice
実装を作成し、org.springframework.security.core.userdetails.UserDetailsService
それを内に挿入する必要がありAuthenticationManagerBuilder
ます。
@Component
public class SecUserDetailsService implements UserDetailsService{
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
/*Here add user data layer fetching from the MongoDB.
I have used userRepository*/
User user = userRepository.findByUsername(username);
if(user == null){
throw new UsernameNotFoundException(username);
}else{
UserDetails details = new SecUserDetails(user);
return details;
}
}
}
型番
UserDetails
また、実装する必要があります。これは、Springによってユーザー認証された詳細を保持するPOJOです。私が行ったように、その中にラップされたエンティティデータオブジェクトを含めることができます。
public class SecUserDetails implements UserDetails {
private User user;
public SecUserDetails(User user) {
this.user = user;
}
......
......
......
}
セキュリティ構成
前に作成したサービスを自動配線し、内部に設定します AuthenticationManagerBuilder
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
SecUserDetailsService userDetailsService ;
@Autowired
public void configAuthBuilder(AuthenticationManagerBuilder builder) throws Exception {
builder.userDetailsService(userDetailsService);
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加