当前位置: 首页 > 面试题库 >

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

池永长
2023-03-14
问题内容

我试图将其他数据保存在de用户主体对象中。

我所做的是:

在我现有的用户类中实现“ UserDetails”界面,我的其他数据(例如电子邮件地址等)保存在该类中。

@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”被调用了两次(由于“ Found”输出)。

当我尝试访问控制器中的主体对象时->

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

我没有其他数据。当我尝试将其强制转换为User对象时,出现无法强制转换的异常。

有什么我想念的吗?

先感谢您。


问题答案:

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

我认为此detailsS​​ervice仅用于获取其他详细信息,但它用于登录本身。

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

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

编辑。:

所以我只需要删除此代码:

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

现在,它也可以与上述问题中的代码一起使用。



 类似资料:
  • 问题内容: 我正在使用Spring Security OAuth2 2.0.7.RELEASE。当我使用ORM连接到数据库并且默认JdbcUserDetailsManager使用jdbc时,我想实现自己的UserDetailsS​​ervice,即 此外,我修改了权限架构,如下所示: 然后,我像这样注入我的自定义userDetailsS​​ervice: 如果我使用Grant_type = pas

  • Django 自带的 User 及 auth 库为快速开发带来了很大便利,也增加了扩展其功能的难度。 Django 官方文档中是推荐使用一对一的关联 Model 来扩展 User model: class UserExtend(Model): user = OneToOneField(User, auto_create=True, relate_name='extend') fie

  • 问题内容: 这是我的情况: 一个Web应用程序对许多应用程序执行某种SSO 登录的用户,而不是单击链接,该应用就会向正确的应用发布包含用户信息(名称,pwd [无用],角色)的帖子 我正在其中一个应用程序上实现SpringSecurity以从其功能中受益(会话中的权限,其类提供的方法等) 因此,我需要开发一个 自定义过滤器 -我猜想-能够从请求中检索用户信息,通过自定义 DetailsUserSe

  • 6.13.2 自定义 ItemWriter 示例 自定义实现 ItemWriter 和上一小节所讲的 ItemReader 有很多方面是类似, 但也有足够多的不同之处。 但增加可重启特性在本质上是一样的, 所以本节的示例就不再讨论这一点。和 ItemReader 示例一样, 为了简单我们使用的参数也是 List: public class CustomItemWriter<T> implement

  • 6.13.1 自定义 ItemReader 示例 为了实现这个目的,我们实现一个简单的 ItemReader, 从给定的list中读取数据。 我们将实现最基本的 ItemReader 功能, read: public class CustomItemReader<T> implements ItemReader<T>{ List<T> items; public CustomIte

  • 感谢SpanInjector和SpanExtractor,您可以自定义spans的创建和传播方式。 目前有两种在进程之间传递跟踪信息的内置方式: 通过Spring Integration 通过HTTP Span ids从Zipkin兼容(B3)头(Message或HTTP头)中提取,以启动或加入现有跟踪。跟踪信息被注入到任何出站请求中,所以下一跳可以提取它们。 与以前版本的Sleuth相比,重要的