带有自定义UserDetailsService的Spring Boot

我去 :

将我的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

}

我无法启动应用程序,因为我得到了(此处为完整异常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)

如果我在配置ApplicationSecurityauth.jdbcAuthentication().dataSource(dataSource).usersByUsernameQuery("...).authoritiesByUsernameQuery("...")一切工作,包括JPA和Spring数据存储库。

戴夫·瑟(Dave Syer):

您的应用似乎对我有用(一旦添加@ConfigurationAuthenticationSecurity)。这是使用JPA的简单应用程序的另一个工作示例,UserDetailsService以防它有所帮助:https : //github.com/scratches/jpa-method-security-sample

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spring Boot:使用自定义UserDetailsService配置AuthenticationManager

带有自定义 fork 加入池的 Spring Boot

自动接线不适用于Spring Boot中的自定义UserDetailsService

如何使用Spring Boot从自定义查询中返回带有几个字段的自定义列表?

Spring安全性和带有Spring Boot的自定义AuthenticationFilter

带有spring-boot的spring-security,自定义登录页面,错误403

带有自定义 ReactiveAuthenticationManager 的 Spring Boot 执行器审计事件

带有Spring Boot Webflux的自定义转换器未调用

带有自定义提供程序的 Spring Boot + Security OAuth2.0 客户端

在类级别带有RequestMapping注释的Spring Boot Actuator自定义RestControllerEndpoint

Gradle:用于Spring Boot的带有jvm参数的自定义任务

Spring Boot:在自定义UserDetailsService中自动连接authenticationManager时,委托构建器不能为null

具有Commons组件的自定义Spring Boot Starter

Spring Boot @RestControllerAdvice没有捕获自定义异常

如何在Spring Boot中将肥皂请求和带有自定义消息的响应记录到文件中?

Spring boot 配置自定义sql

Spring Boot Actuator - 自定义端点

Spring Boot:配置自定义MethodSecurityExpressionOperations?

Spring Boot自定义HttpMessageConverter

Spring boot 禁用自定义 HealthIndicator

Spring Boot + Spring Security的自定义登录页面

Spring \ Spring Boot:是否需要自定义验证器?

Thymeleaf 在没有 spring boot 的情况下调用自定义 java 类

Spring Boot-具有独立tomcat的自定义404页面

不带formLogin()但具有自定义登录表单的Spring Boot身份验证

测试自定义Spring Boot自动配置是否有效

具有自定义安全过滤器的Spring Boot OAuth2

通过Gradle的Spring Boot自定义启动器

使用自定义Gson覆盖Spring-Boot的GsonAutoConfiguration