我正在使用启用了Spring Security 的spring启动应用程序。我使用自定义jdbc身份验证。在我的用户详细信息服务impl中,我抛出usernamenotfound异常,但它不会被记录到任何地方。我也没在控制台上看到任何东西。
下面是我的userdetailservice impl
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
@Service
public class ApplicationUserDetailService implements UserDetailsService{
private ApplicationUserDao applicationUserDao;
@Autowired
public ApplicationUserDetailService(@Qualifier("db") ApplicationUserDao applicationUserDao) {
this.applicationUserDao=applicationUserDao;
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
return applicationUserDao.loadUserByUsername(username)
.orElseThrow(()->{
System.out.println("here...");
throw new UsernameNotFoundException("dsdsds");
});
}
}
下面是jdbc身份验证的安全配置
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(provider());
}
@Bean
public DaoAuthenticationProvider provider() {
DaoAuthenticationProvider pr=new DaoAuthenticationProvider();
pr.setUserDetailsService(applicationUserDetailService);
pr.setPasswordEncoder(encoder);
return pr;
}
用户详细信息
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Repository;
@Repository("db")
public class DBUserDaoImpl implements ApplicationUserDao{
private final JdbcTemplate jdbcTemplate;
@Autowired
public DBUserDaoImpl(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate=jdbcTemplate;
}
@Override
public Optional<ApplicationUser> loadUserByUsername(String username) throws UsernameNotFoundException {
return Optional.ofNullable(jdbcTemplate.query("select * from users where username='"+username+"'"
,new UserExtractor(jdbcTemplate)));
}
}
当我发送错误的细节,我应该得到例外,但它不会来。请帮帮我。Spring Boot2.4.2
1条答案
按热度按时间dkqlctbz1#
UsernameNotFoundException
通常情况下,运行服务器的人并不需要知道,因此Spring Security 不会为它打印消息。这是一个错误,是用户的错误(他们输入了一个不存在的帐户)。不管怎样,如果您想打印消息,可以执行以下操作: