gpt4 book ai didi

java - 带有自定义 UserDetailsS​​ervice 的 Spring Boot

转载 作者:IT老高 更新时间:2023-10-28 13:51:36 27 4
gpt4 key购买 nike

将我的 UserDetailsS​​ervice(使用 Spring Data JPA)的自定义实现添加到 Spring Boot 应用程序的正确方法是什么?

public class DatabaseUserDetailsService implements UserDetailsService {

@Inject
private UserAccountService userAccountService;

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userAccountService.getUserByEmail(username);
return new MyUserDetails(user);
}

}


public interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {

public User findByEmail(String email);

}



@Service
public class UserAccountService {

@Inject
protected UserRepository userRepository;

public User getUserByEmail(String email) {
return userRepository.findByEmail(email);
}

}


@Configuration
@ComponentScan
@EnableAutoConfiguration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.sample")
@EntityScan(basePackages = { "com.sample" })
@EnableJpaAuditing(auditorAwareRef = "auditorProvider")
public class Application {

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

...

@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
protected static class ApplicationSecurity extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/").hasRole("USER")
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}


}

@Order(Ordered.HIGHEST_PRECEDENCE + 10)
protected static class AuthenticationSecurity extends GlobalAuthenticationConfigurerAdapter {

@Inject
private UserAccountService userAccountService;

@Override
public void init(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService());
}

@Bean
public UserDetailsService userDetailsService() {
return new DatabaseUserDetailsService();
}

}

}


@Entity
public class User extends AbstractPersistable<Long> {

@ManyToMany
private List<Role> roles = new ArrayList<Role>();

// getter, setter

}


@Entity
public class Role extends AbstractPersistable<Long> {

@Column(nullable = false)
private String authority;

// getter, setter

}

我无法启动应用程序,因为我得到了(此处完全异常(exception) http://pastebin.com/gM804mvQ)

Caused by: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: com.sample.model.User.roles[com.sample.model.Role]
at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1134)

当我使用 auth.jdbcAuthentication().dataSource(dataSource).usersByUsernameQuery("...).authoritiesByUsernameQuery("...") 配置我的 ApplicationSecurity一切正常,包括 JPA 和 Spring Data 存储库。

最佳答案

您的应用似乎对我有用(一旦我将 @Configuration 添加到 AuthenticationSecurity)。这是另一个使用 JPA UserDetailsS​​ervice 的简单应用程序的工作示例,以防万一:https://github.com/scratches/jpa-method-security-sample

关于java - 带有自定义 UserDetailsS​​ervice 的 Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24723201/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com