Spring Framework 学习笔记(4) Spring Security

218 阅读1分钟

1. 背景

本节我们学习 Spring Security 。

2.知识

Spring Security 是一个提供身份验证、授权和针对常见攻击的保护的框架。

Spring Secrity 能够在Web请求级别和方法调用级别处理身份认证和授权。

Spring Secrity 通过 filter 来实现认证,DelegatingFilterProxy是一个特殊的Servlet Filter,它本身所做的工作并不多。只是将工作委托给一个javax.servlet.Filter实现类。.

Spring Security 一般要配置这些:

  • 用户存储的配置(如何存储用户信息)
  • 指定哪些请求需要认证,预计需要的权限
  • 自定义登录页面

Spring Security 非常灵活,能够基于各种用户存储来做认证:内存,数据库,LDAP,自定义等

3. 示例

1) 引用依赖库

 <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>${spring-security-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>${spring-security-version}</version>
        </dependency>

使用 @EnableWebSecurity 注解启用Web安全功能。

/**
 * @EnableWebSecurity 注解将会启用Web安全功能。
 * Spring Security必须配置在一个实现了 WebSecurityConfigurer的bean中,或者继承WebSecurityConfigurerAdapter
 */
@Configuration
@EnableWebSecurity
public class MySecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        // 启用 内存数据存储
        auth.inMemoryAuthentication()
                .passwordEncoder(passwordEncoder)
                .withUser("user").password(passwordEncoder.encode("123")).roles("USER").and()
                .withUser("admin").password(passwordEncoder.encode("admin")).roles("USER", "ADMIN");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.formLogin()// 启用默认登录页
                .and()
                .authorizeRequests()
//                .antMatchers("/manage/**").authenticated()
                .antMatchers("/manage/**").hasRole("ADMIN")
                .anyRequest().permitAll();
    }


}

上面代码有两个配置方法:

  • configure(AuthenticationManagerBuilder auth) :配置了内存存储用户信息,并增加了两个账号。
  • configure(HttpSecurity http) :配置了请求需要认证。

我的代码见:github.com/vir56k/java…

4..参考:

docs.spring.io/spring-secu…