java - Spring Security 自定义 UserDetailsS​​ervice 和自定义 User 类

标签 java spring security jpa spring-security

我正在尝试在用户主体对象中保存其他数据。

我所做的是:

为我的现有用户类实现“UserDetails”接口(interface),其中保存了我的其他数据(如电子邮件地址等)。

@Entity
public class User implements UserDetails {

然后我创建了一个 UserDetailsS​​ervice 实现:

@Service
public class UserDetailsServiceImpl implements UserDetailsService {

    @Autowired
    UserDAO userDAO;

    @Override
    public UserDetails loadUserByUsername(String username)
            throws UsernameNotFoundException {
        User user = userDAO.findOneByUsername(username);
        if (user == null)
            throw new UsernameNotFoundException("username " + username
                    + " not found");

        System.out.println("---------------------> FOUND ------------->"
                + user.getEmail());

        return user;
    }

}

最后一步是在我的安全配置中添加 UserDetailsS​​ervice。

@Configuration
@EnableWebMvcSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

@Autowired
UserDetailsService userDetailsService;



@Override
protected void configure(AuthenticationManagerBuilder auth)
        throws Exception {
    auth.userDetailsService(userDetailsService());
// ...

}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.userDetailsService(userDetailsService());
// ...
}

@Override
protected UserDetailsService userDetailsService() {
    return userDetailsService;
}

我在控制台中看到“loadUserByName”被调用了两次(因为“找到”输出)。

当我尝试访问 Controller 中的主体对象时 ->

System.out.println(SecurityContextHolder.getContext()
                .getAuthentication().getPrincipal());

我没有得到我的额外数据。 当我尝试将其转换为我的用户对象时,我得到一个无法转换的异常。

我有什么遗漏吗??

提前谢谢你。

最佳答案

好的。我的问题隐藏在我没有发布的代码中。

我以为这个 detailsS​​ervice 只是为了获取更多详细信息,但它用于登录本身。

我另外配置了“jdbcAuthentication”,spring 似乎总是使用它。

现在我只配置了 detailsS​​ervice,一切正常。

编辑:

所以我只需要删除这段代码:

auth.jdbcAuthentication() .dataSource(dataSource)
     * .passwordEncoder(passwordEncoder) .usersByUsernameQuery(
//   ....

现在它也适用于我上面问题中的代码。

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

相关文章:

java - 将整数(非字符串)数据插入 JavaFX2 TableView

java - EL Collection#contains 不工作

java - 如何使用 Java 或 Spring boot 在从 Mongodb 检索的 HTML 中显示图像

java - 设置 Spring 安全性以在未通过身份验证的情况下将用户重定向到登录页面

java - 将符号链接(symbolic link)文件夹隐藏到硬链接(hard link)文件夹

java - 试图理解简单的代码

java - NDK 应用程序签名检查

java - 是否需要将私有(private)嵌套类的内部声明为私有(private)?

security - SYN Cookie 网络服务器安全

javax.annotation.security 不是基于角色的访问控制?