使用 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/
我制作了一个 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/