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

使用JPA和Spring Security自定义登录

万俟皓
2023-03-14

我一直在尝试通过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 security configuration中启动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在互联网上尝试了所有可能的事情,但我的努力没有取得任何成果。

共有1个答案

章绪
2023-03-14

类内登录身份验证:
在无效配置(AuthenticationManagerBuilder auth)之前删除Autowired,为该类添加批注

@Configuration    
@EnableWebSecurity


在类MyUserDetailService.loadUserByUsername:
更改

if (user == null) {
      return null;
}

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

  • 我试图创建Laravel 5.7的第一个项目。 在这个项目中,我有三个不同的领域和三个不同的登录(例如,用户登录,管理员登录,技术人员登录) 现在,我想自定义第一次登录(url,html,输入,类,数据库表,数据库列ecc...),但我不知道该怎么做。 第一次登录的URL是 我的桌子是: 我已经搜索了很多,用我找到的信息,我试图这样做: config/auth。php: 网状物php 登录控制器。

  • 有人知道如何使用firebase或任何其他服务为flutter拥有自定义用户名和密码登录吗?我不是在说电子邮件验证。用户只需用密码和登录名创建用户名。

  • 我目前正在尝试设置一个从DB2读取配置值的自定义。由于ConfigSources是通过ServiceLoader加载的,因此看起来没有办法通过JPA访问数据库,因为ServiceLoader很早就在扫描自定义ConfigSources。 有什么想法吗?

  • 而且,再一次,即使键入正确的凭据,正如我在“userDetailsService”方法中指定的那样,我也无法登录,但这次我终于可以在控制台上看到错误消息: 显然我走了,但没有离开这个地方,因为现在我不知道我的代码有什么问题...

  • 我正在尝试开发一个定制的JAAS登录模块,它使用一个令牌并从不同的来源获取用户数据。它应该作为wildfly 8.2.1 final的身份验证领域。我有一个测试servlet,我想在其中进行身份验证,以便检查注入EJB的允许角色。 这个网站的测试:http://www.radcortez.com/custom-principal-and-loginmodule-for-wildfly/事实上,我甚