zoukankan      html  css  js  c++  java
  • Spring Security的三个configure方法

    参考自:java – HttpSecurity,WebSecurity和AuthenticationManagerBuilder

    Spring Security通过继承WebSecurityConfigurationAdapter这个类,可以选择实现该类中的三个重载的configure方法,虽然可以下载代码文档,但是稍微有点……

    看看这三个方法:

    void configure(AuthenticationManagerBuilder auth) throws Exception
    
    void configure(HttpSecurity http) throws Exception
    
    
    void configure(WebSecurity web) throws Exception

    再来看段重写的代码:

    @Configuration
    @EnableWebSecurity
    @EnableGlobalMethodSecurity(prePostEnabled = true)
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    
        @Autowired
        private CustomUserDetailsService customUserDetailsService; // 该类实现UserDetailsServer接口,重写loadUserByUsername方法,从数据库获取用户名,密码,角色
    
        @Override
            protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            auth.userDetailsService(customUserDetailsService).passwordEncoder(new PasswordEncoder() {
                @Override
                public String encode(CharSequence charSequence) {
                    return charSequence.toString();
                }
    
                @Override
                public boolean matches(CharSequence charSequence, String s) {
                    return s.equals(charSequence.toString());
                }
            });
        }
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests()
                    .anyRequest().authenticated()
                    .and()
                    .formLogin().loginPage("/login")
                    .defaultSuccessUrl("/").permitAll()
                    .and()
                    .logout().permitAll();
            http.csrf().disable();
        }
    
        @Override
        public void configure(WebSecurity web) throws Exception {
    
            web.ignoring().antMatchers("/css/**", "/js/**");
        }
    }

    configure(AuthenticationManagerBuilder)用于通过允许AuthenticationProvider容易地添加来建立认证机制。

    也就是说用来记录账号,密码,角色信息。

    下方代码不从数据库读取,直接手动赋予

    AuthenticationManagerBuilder allows 
        public void configure(AuthenticationManagerBuilder auth) {
            auth
                .inMemoryAuthentication()
                .withUser("user")
                .password("password")
                .roles("USER")
            .and()
                .withUser("admin")
                .password("password")
                .roles("ADMIN","USER");
    }

    configure(HttpSecurity)允许基于选择匹配在资源级配置基于网络的安全性。以下示例将以/ admin /开头的网址限制为具有ADMIN角色的用户,并声明任何其他网址需要成功验证。

    也就是对角色的权限——所能访问的路径做出限制

    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeUrls()
            .antMatchers("/admin/**").hasRole("ADMIN")
            .anyRequest().authenticated()
    }

    configure(WebSecurity)用于影响全局安全性(配置资源,设置调试模式,通过实现自定义防火墙定义拒绝请求)的配置设置。

    一般用于配置全局的某些通用事物,例如静态资源等

    public void configure(WebSecurity web) throws Exception {
        web
            .ignoring()
            .antMatchers("/resources/**");
    }
  • 相关阅读:
    SpringMVC Failed to instantiate [java.util.List]: Specified class is an interface
    github上项目直接在浏览器页面像VS Code一样查看代码
    springboot+dubbo整合swagger-ui+swagger-dubbo
    petalinux非离线模式build卡死在u-boot编译问题
    SystemC使用示例
    使用chisel做数字电路开发的Hello World
    lmgrd在Linux系统上的配置
    FFmpeg libswscale源码分析3-scale滤镜源码分析
    FFmpeg libswscale源码分析2-转码命令行与滤镜图
    FFmpeg libswscale源码分析1-API介绍
  • 原文地址:https://www.cnblogs.com/woyujiezhen/p/13049979.html
Copyright © 2011-2022 走看看