我使用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。现在我想用一个散列密码存储在数据库中的信息。
我终于找到了解决办法。问题不是来自spring Security。它在应用程序的另一部分。如果有人想重用这段代码,它就管用了!
logback无法计算spring应用程序名称
问题内容: 我已经将一个Web应用程序部署到服务器上。我的应用程序使用和。但是,并非所有日志记录消息都已写入文件。 在我的课堂上,我有: 我的文件在本地计算机上运行良好,并且已正确部署。 我看到正在写入的应用程序生成的错误消息没有写入我的。由于输出模式的格式与我的模式不同,因此看起来的日志消息来自其他日志框架。我在中看到的日志记录如下: 我的log4j模式是这样的: 一些日志记录出现在我的文件日志
null
我正在尝试使用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是否可以有条件地记录日志?换句话说,我希望仅在特定用户发出请求时才能获得跟踪日志。由于我事先不知道哪些用户会受到影响,因此我无法简单地临时对用户名进行硬编码。 编辑: 我想我需要更清楚一点。我可以轻松地在日志语句中添加条