使用 Spring 引导了解身份验证和会话管理

Understanding authentication and session management using Spring boot

我制作了一个 spring 引导项目,使用 mongo 数据库作为后端。我想确保用户经过身份验证和授权,同时维护某种内存会话(使用 redis 或内置 spring 会话的东西)
我已经经历了很多像 this, this, this

他们都要求您扩展 WebSecurityConfigAdapter、配置 HttpSecurity 并提供 UserDetailService。我已经通过以下方式完成了。

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    public UserDetailsService userDetailsService(){
        return new StockUserDetailService();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/login/**").permitAll()
                .antMatchers("/logout/**").permitAll()
                .antMatchers("/admin/**").hasAuthority("ADMIN")
                .antMatchers("/broker/**").hasAnyAuthority("BROKER")
                .anyRequest().fullyAuthenticated();
    }

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

但我不明白的是,sessin 管理在哪里进行以及用户应该用来登录的 url 是什么?如果我为 /login 编写一个带有映射的控制器,我的操作应该在登录控制器中进行。我真的没看懂。



更新

我试着发帖到 /login。我收到此错误

{
"timestamp": 1494842451672,
"status": 403,
"error": "Forbidden",
"message": "Could not verify the provided CSRF token because your session was not found.",
"path": "/login"
}

Spring 为您管理 /login 路线。您只需要使用用户凭据向它发送 POST 请求。如果你想指定另一个登录 URL 你可以用 .loginProcessingUrl("/myCustomLoginUrl") 对于 UserDetailsService,您必须提供自己的实现,该实现实现了 loadUserByUsername(String userName) 方法,该方法从数据库或您正在使用的任何持久性存储中检索用户,并且 returns 具有相应权限的 org.springframework.security.core.userdetails.User .请参阅以下官方文档:https://spring.io/guides/gs/securing-web/