永远不会调用UserDetailsS​​ervice(Spring启动安全性)

时间:2016-07-11 12:01:48

标签: java spring-security spring-boot

我有这个SpringSecurity配置

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfig  extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsServiceImpl detailsService;

    @Autowired
    public void registerGlobalAuthentication(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(detailsService);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/", "/index").access("hasRole('USER')");
        http.userDetailsService(detailsService);
    }
}

当我打开index.html页面时,我收到403错误。这是因为用户是anonymous。但在打开此页面之前,我想要检查用户并设置角色和细节。为此我写这个服务

@Service
public class UserDetailsServiceImpl implements UserDetailsService {
    @Autowired
    private HttpServletRequest request;
    @Autowired
    AuthService authService;
    @Override
    public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
        String ipAddress = request.getRemoteAddr();
        AuthLkUser authLkUserByIp = authService.getAuthLkUserByIp(ipAddress);

        if (authLkUserByIp == null) return null;

        boolean b = authService.checkAuthLkUser(authLkUserByIp);
        if (b) return null;
        Set<GrantedAuthority> roles = new HashSet();
        roles.add(new SimpleGrantedAuthority("USER"));
        UserDetails userDetails = new org.springframework.security.core.userdetails.User(authLkUserByIp.getMsisdn(),
                        authLkUserByIp.getSubsId(), roles);
        return userDetails;
    }
}

但这项服务从未被调用过。

1 个答案:

答案 0 :(得分:0)

在Spring Boot中,如果您有自定义的Spring安全配置,那么它将不会使用Spring Configuration的自动配置。

在Spring安全配置中,您还没有给出对用户进行身份验证的权限。 Spring Security中提供了基于表单,基于头的标识等身份验证。您应该使用其中一个来验证用户身份,以便在身份验证期间使用UserDetailsServiceImpl加载用户。

按照此post进行基于表单的登录