美文网首页
Spring Framework 学习笔记(4) Spring

Spring Framework 学习笔记(4) Spring

作者: 张云飞Vir | 来源:发表于2021-07-08 14:52 被阅读0次

    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) :配置了请求需要认证。

    我的代码见:https://github.com/vir56k/java_demo/tree/master/spring_security_demo_1

    4..参考:

    https://docs.spring.io/spring-security

    相关文章

      网友评论

          本文标题:Spring Framework 学习笔记(4) Spring

          本文链接:https://www.haomeiwen.com/subject/zkroultx.html