我一直试图通过spring security来验证我的服务。为此,我使用过滤器作为
这是我一直使用的安全配置:在此配置中,我通过身份验证过滤所有请求并允许所有请求。对于身份验证,我有登录页面。在登录表单中,我使用了'用户名'用于电子邮件和密码'分别用于属性名称的密码。
public class LoginAuthenticate extends WebSecurityConfigurerAdapter{
@Autowired
@Qualifier("userDetailsService")
MyUserDetailService userDetailsService;
@Autowired
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
System.out.println("reaching");
}
@Override
protected void configure(HttpSecurity http) throws Exception{
http.authorizeRequests()
.antMatchers("/resources/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.usernameParameter("username")
.passwordParameter("password")
.defaultSuccessUrl("/success")
.failureUrl("/")
.permitAll()
.and()
.logout()
.permitAll().and().csrf().disable();
}
@Bean
public PasswordEncoder passwordEncoder(){
PasswordEncoder encoder = new BCryptPasswordEncoder();
return encoder;
}
这是我的程序结构
为了实施UserDEtailService
,我做了以下
这是我覆盖的UserDetailsService
,我已经自动安装了存储库以从数据库中获取电子邮件地址和密码[使用电子邮件作为用户名],然后使用用户名和密码创建了userdetails用户对象并返回那个对象。当用户在登录页面输入用户名和密码时,我应该能够使用从数据库中提取的详细信息进行身份验证,例如用户的电子邮件和密码应该与从db中检索到的电子邮件和密码相匹配。但问题是我无法在spring安全配置中激活authenticate方法:
@Service("userDetailsService")
public class MyUserDetailService implements UserDetailsService{
@Autowired
IUsers userrepo;
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
User user = userrepo.finduserByUserName(username);
if (user == null) {
return null;
}
List<GrantedAuthority> auth = AuthorityUtils
.commaSeparatedStringToAuthorityList("ROLE_USER");
if (username.equals("admin")) {
auth = AuthorityUtils
.commaSeparatedStringToAuthorityList("ROLE_ADMIN");
}
String password = user.getLoginPassword();
String Email = user.getEmailAddress();
System.out.println(password+ " "+ Email);
return new org.springframework.security.core.userdetails.User(Email,password,auth);
}
}
但是我的身份验证功能没有评估用户!
有人可以帮我解决这里出了什么问题。调试没有错误。如果达到身份验证功能,我会安慰,但不会达到。我使用JPA在这个自定义登录上尝试了互联网上的所有可能的东西,但是我的努力并没有让任何事情变得富有成效。
答案 0 :(得分:0)
在课程LoginAuthenticate中:在@Autowired
之前删除void configure(AuthenticationManagerBuilder auth)
,
为此类添加注释
@Configuration
@EnableWebSecurity
在类MyUserDetailService.loadUserByUsername中:
更改
if (user == null) {
return null;
}
到
if (user == null) {
throw new UsernameNotFoundException ("User not found");
}