第一步:添加@EnableWebSecurity注解
一般来说我们都会利用@EnableWebSecurity
注解继承 WebSecurityConfigurerAdapter
的类,这样就构成了spring-Security的配置,我们还可以用@EnableWebSecurity注解和 @Configuration
注解一起注解 WebSecurityConfigurer
类型的类来构成配置
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
}
第二步:我们有了注解,就差第一步说的 WebSecurityConfigurer
类型的类了,一般情况,会选择继 承 WebSecurityConfigurerAdapter
类,然后重写它的两个方法即可
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
/**
* 匹配 "/" 路径,不需要权限即可访问
* 匹配 "/user" 及其以下所有路径,都需要 "USER" 权限
* 登录地址为 "/login",登录成功默认跳转到页面 "/user"
* 退出登录的地址为 "/logout",退出成功后跳转到页面 "/login"
* 默认启用 CSRF
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()//允许基于使用HttpServletRequest限制访问
.antMatchers("/").permitAll()
.antMatchers("/user/**").hasRole("USER")
.and()
//指定支持基于表单的身份验证。如果未指定FormLoginConfigurer#loginPage(String),则将生成默认登录页面
.formLogin().loginPage("/login").defaultSuccessUrl("/user")
.and()
//添加退出登录支持。当使用WebSecurityConfigurerAdapter时,这将自动应用。默认情况是,访问URL"/ logout",
// 使HTTP Session无效来清除用户,清除已配置的任何#rememberMe()身份验证,清除SecurityContextHolder,
// 然后重定向到"/login?success"
.logout().logoutUrl("/logout").logoutSuccessUrl("/login");
}
/**
* 在内存中创建一个名为 "anoy" 的用户,密码为 "pwd",拥有 "USER" 权限
*/
@Override
protected void configure(AuthenticationManagerBuilder builder) throws Exception{
builder
.inMemoryAuthentication()
.withUser("anoy").password("pwd").roles("USER");
}
}
接下来主要介绍一下我们重写的两个方法的作用
(1):configure(HttpSecurity hhtp)
HttpSecurity作用:配置拦截什么URL、设置什么权限等安全控制
(2):configure(AuthenticationManagerBuilder builder)
AuthenticationManagerBuilder 用于创建一个 AuthenticationManager,让我能够轻松的实现内存验证、LADP验证、基于JDBC的验证、添加UserDetailsService、添加AuthenticationProvider