我无法将UserDetailsS​​ervice正确添加到SpringSecurity

时间:2018-10-15 19:55:49

标签: spring-boot spring-security

我有form可以登录我的spring boot服务器:

<form class="form" action="/j_spring_security_check" method="post">
      <div class="form-group">
           <label for="username" class="text-white">Username</label><br>
           <input type="text" name="username" id="username" class="form-control">
            </div>
            <div class="form-group">
            <label for="password" class="text-white">Password:</label><br>
            <input type="text" name="password" id="password" class="form-control">
            </div>
            <div class="form-group">
            <input type="submit" name="submit" class="btn btn-info btn-md" value="Enter">
       </div>
  </form>

这是我的Spring security配置:

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    private final AdminDetailService adminDetailService;

    public SecurityConfig(AdminDetailService adminDetailService) {
        this.adminDetailService = adminDetailService;
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .antMatcher("/home/**")
                .authorizeRequests()
                .anyRequest()
                .hasRole("ADMIN")
                .and()
                .formLogin()
                .usernameParameter("username")
                .loginPage("/home/login").permitAll()
                .loginProcessingUrl("/j_spring_security_check")
                .defaultSuccessUrl("/home", true)
                .and()
                .logout()
                .logoutRequestMatcher(new AntPathRequestMatcher("/home/logout", "GET")).permitAll()
                .and()
                .rememberMe()
                .key("f@fdgdf543$cefdcF")
                .and().csrf().disable();
    }

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

}

我有我的自定义UserDetailsService

@Service
public class AdminDetailService implements UserDetailsService {

    private final UserService userService;

    public AdminDetailService(UserService userService) {
        this.userService = userService;
    }

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        User user = userService.findByUsername(username);
        if (user == null) throw new UsernameNotFoundException(String.format("User with username [%s] not found.", username));

        return new AuthUser(user.getLogin(), user.getPassword());
    }
}

我等待下一个逻辑:

  1. 我从未登录状态打开网页

  2. Spring Security将我重定向到我输入用户名和密码的登录页面

  3. 我按Enter键,我必须输入AdminDetailService's方法loadUserByUsername

  4. 在此方法中,我检查数据库中的用户数据,如果确定,请返回Spring Security UserDetail并重定向到成功页面

但是当我在3步中按Enter时,我没有进入AdminDetailService's方法loadUserByUsername。我不明白自己错过了什么,因此无法正常工作loadUserByUsername。我已经做了很长时间了,没有任何问题,但是现在我忘了一些东西

0 个答案:

没有答案