当前位置: 首页 > 知识库问答 >
问题:

Spring Security无法使用userDetailService和passwordEncoder进行日志记录

冯皓
2023-03-14

我使用Spring Security,并且希望使用de userDetailService和passwordEncoder进行登录。

用户的创建工作良好。我的数据库中有使用BCrypt密码的用户。我使用相同的PasswordEncoder创建用户和记录用户。

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

  @Autowired
  private IUtilisateurService utilisateurService;

  @Override
  protected void configure(AuthenticationManagerBuilder auth) throws Exception {
     auth.userDetailsService(utilisateurService)
     .passwordEncoder(passwordEncoder())
    ;
  }

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
    //
      .csrf().disable()
      //
      .authorizeRequests()//
      .antMatchers(HttpMethod.GET, "/**").permitAll()//
      .antMatchers(HttpMethod.POST, "/**").authenticated()//
      .antMatchers(HttpMethod.PUT, "/**").authenticated()//
      .antMatchers(HttpMethod.DELETE, "/**").authenticated()//
      .anyRequest().permitAll()//
      .and()//
      .httpBasic().and()//
      .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
  }

  @Bean
  public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder(10);
  }

}

以及在扩展UserDetailsService的IUtilisateurService的实现中:

@Service("utilisateurService")
public class UtilisateurServiceImpl implements IUtilisateurService {

  private static final ILogger LOG = LoggerImpl.getILogger(UtilisateurServiceImpl.class);

  private IUtilisateurDao utilisateurDao;

  private Mapper mapper;

  private PasswordEncoder passwordEncoder;

  @Autowired
  public UtilisateurServiceImpl(IUtilisateurDao utilisateurDao, Mapper mapper, PasswordEncoder passwordEncoder) {
    super();
    this.utilisateurDao = utilisateurDao;
    this.mapper = mapper;
    this.passwordEncoder = passwordEncoder;
  }

  @Override
  public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    UtilisateurEntity utilisateur = utilisateurDao.getUtilisateurFromLogin(username);
    String methodName = "loadUserByUsername";
    if (utilisateur == null) {
      String msg = String.format("Aucun utilisateur avec le login %s n'a pu être trouvé", username);
      LOG.warning(methodName, msg);
      throw new UsernameNotFoundException(msg);
    }
    return new UtilisateurUserDetail(utilisateur);
  }

  @Override
  public void saveNewUtilisateur(String login, String motDePasse) {
    String methodName = "saveNewUtilisateur";
    if (StringUtils.isBlank(login) || StringUtils.isBlank(motDePasse)) {
      String message = "Le login et le mot de passe sont obligatoires";
      LOG.warning(methodName, message);
      throw new IllegalArgumentException(message);
    }
    UtilisateurEntity utilisateur = new UtilisateurEntity();
    utilisateur.setLogin(login);
    utilisateur.setMotDePasse(passwordEncoder.encode(motDePasse));
    LOG.info(methodName, String.format("Sauvegarde du nouvel utilisateur %s", login));
    utilisateurDao.saveNewUtilisateur(utilisateur);
  }
  ...

在此步骤之前,我在代码中使用了具有固定用户/密码的inMemoryAuthentication。现在我想用一个散列密码存储在数据库中的信息。

共有1个答案

云建木
2023-03-14

我终于找到了解决办法。问题不是来自spring Security。它在应用程序的另一部分。如果有人想重用这段代码,它就管用了!

 类似资料:
  • logback无法计算spring应用程序名称

  • 问题内容: 我已经将一个Web应用程序部署到服务器上。我的应用程序使用和。但是,并非所有日志记录消息都已写入文件。 在我的课堂上,我有: 我的文件在本地计算机上运行良好,并且已正确部署。 我看到正在写入的应用程序生成的错误消息没有写入我的。由于输出模式的格式与我的模式不同,因此看起来的日志消息来自其他日志框架。我在中看到的日志记录如下: 我的log4j模式是这样的: 一些日志记录出现在我的文件日志

  • 我正在尝试使用PostSharp和multicastAttribute实现日志记录。使用PostSharp诊断库中的日志功能。 我有一个GlboalAspects。启动项目目录中的cs。内容如下。 右键单击我的项目并选择属性,默认命名空间是“alp_generator” 我不知道“PostSharp.Patterns.Diagnostics.LogAttribute”是否正确。 我根本没有日志记录

  • 我正在尝试使用Spring Security UserDetailService身份验证使用电子邮件而不是用户名登录,但我无法登录并获取 org.springframework.security.authentication.内部身份验证服务异常。 调试代码时,调试器不会跟踪 用户user=userDao。findByUserName(用户电子邮件);来自UserServiceImpl。java和

  • 问题内容: 我正在使用的Web应用程序偶尔会为某些用户带来数据完整性问题。我想打开跟踪级别的日志记录,但是由于我们每秒要处理100个请求,因此每个日志记录都是不可能的。 log4j是否可以有条件地记录日志?换句话说,我希望仅在特定用户发出请求时才能获得跟踪日志。由于我事先不知道哪些用户会受到影响,因此我无法简单地临时对用户名进行硬编码。 编辑: 我想我需要更清楚一点。我可以轻松地在日志语句中添加条