zoukankan      html  css  js  c++  java
  • SpringSecurity02 表单登录、SpringSecurity配置类

    1 功能需求

      springSecuriy默认的登录窗口是一个弹出窗口,而且会默认对所有的请求都进行拦截;要求更改登录页面(使用表单登录)、排除掉一些请求的拦截

    2 编写一个springSecurity配置类

      继承 WebSecurityConfigurerAdapter 类,并重写两个configure方法   

    package cn.xiangxu.spring_security_system;
    
    //import cn.xiangxu.spring_security_system.service.MyUserService;
    import cn.xiangxu.spring_security_system.utils.MyPasswordEncoder;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.builders.WebSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    
    /**
     * 权限服务类
     */
    @Configuration // 等同于XML中的beans
    @EnableWebSecurity // 开启webSecurity功能
    public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
    
    //    @Autowired
    //    private MyUserService myUserService;
    
    //    @Override
    //    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    //
    //        // 直接将用户信息和权限写死
    ////        auth.inMemoryAuthentication()
    ////                .withUser("admin")
    ////                .password("123456")
    ////                .roles("ADMIN");
    ////        auth.inMemoryAuthentication()
    ////                .withUser("wys")
    ////                .password("123456")
    ////                .roles("ADMIN");
    ////        auth.inMemoryAuthentication()
    ////                .withUser("demo")
    ////                .password("123456")
    ////                .roles("USER");
    //
    //        auth.userDetailsService(myUserService).passwordEncoder(new MyPasswordEncoder()); // 利用自定义的UserService进行管理
    //    }
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests()
                    .antMatchers("/").permitAll() // 主页面请求拦截排除
                    .anyRequest().authenticated()  // 除主页面外的所有请求都会被拦截
                    .and()
                    .logout().permitAll() // 注销请求拦截排除
                    .and()
                    .formLogin(); // 设置使用表单登录的方式
            http.csrf().disable(); // 关闭csrf验证
        }
    
        @Override
        public void configure(WebSecurity web) throws Exception {
            // 拦截排除设置
            web.ignoring().antMatchers("/js/**", "/css/**", "/images/**");
        }
    
    
    }
    权限配置类

      技巧01:@Configuration 就相当于xml配置文件中的beans,@Bean就相当于XML配置文件中的bean

      

    3 编写一些接口用于测试

      注意:为了简便,我直接将测试接口写在了启动类中

    package cn.xiangxu.spring_security_system;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.security.access.prepost.PreAuthorize;
    import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @SpringBootApplication
    @RestController
    //@EnableGlobalMethodSecurity(prePostEnabled = true) // 开启@PreAuthorize注解
    public class SpringSecuritySystemApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringSecuritySystemApplication.class, args);
        }
    
        @GetMapping(value = "/")
        public String home() {
            return "Welcome to study springSecurity.";
        }
    
        @GetMapping(value = "/hello")
        public String hello() {
            return "hello boy";
        }
    
    //    @PreAuthorize("hasRole('ROLE_ADMIN')") // 设定权限校验:只用ADMIN角色才能调用该接口
        @GetMapping("/roleAuth")
        public String role() {
            return "admin role";
        }
    }
    View Code

      3.1 访问主页面 http://127.0.0.1:8080/ 时跳过了登录验证

        原因:我们在springSecurity配置类中排除了 http://127.0.0.1:8080/ 请求(即:http://127.0.0.1:8080/ 会默认不进行登录验证)

        

      3.2 访问hello页面 http://127.0.0.1:8080/hello 时自动跳转到了登录页面

        技巧01:登录名默认是user,登录密码在控制台打印出来了

        

  • 相关阅读:
    database backup scripts
    RMAN笔记之备份集和备份片
    数据缓冲区详解
    Oracle数据库中快照的使用
    linux 安装RabbitMQ 注意版本
    转 Oracle12c/11个 Client安装出现"[INS-30131]"错误“请确保当前用户具有访问临时位置所需的权限”解决办法之完整版
    Oracle alert日志中出现:‘Fatal NI connect error 12170’
    Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区
    python基础: String类型
    Python3 urllib模块的使用(转载)
  • 原文地址:https://www.cnblogs.com/NeverCtrl-C/p/7992984.html
Copyright © 2011-2022 走看看