我有这个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;
}
}
但这项服务从未被调用过。
答案 0 :(得分:0)
在Spring Boot中,如果您有自定义的Spring安全配置,那么它将不会使用Spring Configuration的自动配置。
在Spring安全配置中,您还没有给出对用户进行身份验证的权限。 Spring Security中提供了基于表单,基于头的标识等身份验证。您应该使用其中一个来验证用户身份,以便在身份验证期间使用UserDetailsServiceImpl
加载用户。
按照此post进行基于表单的登录