zoukankan      html  css  js  c++  java
  • (一)Spring Security Demo 登陆与退出


    下面的代码需要spring环境的支持;

    看这个系列博客之前,需要这个博客,大概了解下 spring secutity 文档


    配置springSecurityFilterChain过滤器

    • 第一步

      写一个类,继承 WebSecurityConfigurerAdapter 类,并且实现 WebMvcConfigurer 接口;

      package cn.hyc.config;
      
      import org.springframework.context.annotation.Bean;
      import org.springframework.security.config.annotation.web.builders.HttpSecurity;
      import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
      import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
      import org.springframework.security.core.userdetails.User;
      import org.springframework.security.core.userdetails.UserDetailsService;
      import org.springframework.security.provisioning.InMemoryUserDetailsManager;
      import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
      
      
      /**
       * 跟 springSecurityFilterChain 有关的  过滤器
       */
      @EnableWebSecurity
      public class WebSecurityConfig implements WebMvcConfigurer {
      
          /**
           * 配置认证用户信息,有好多种方法,这里只是最简单一种,写死在代码里面
           * @return
           */
          @Bean
          public UserDetailsService userDetailsService() {
              InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
              manager.createUser(User.withDefaultPasswordEncoder().username("user").password("password").roles("USER").build());
              return manager;
          }
      
       
      }
      
      
    • 第二步

      然后再写一个类 ,继承 AbstractSecurityWebApplicationInitializer

      package cn.hyc.config;
      
      import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;
      
      /**
       * 
       *
       * 配置 springSecurityFilterChain 拦截器,拦截所有的请求
       */
      public class SecurityWebApplicationInitializer
              extends AbstractSecurityWebApplicationInitializer {
      
      
      }
      

      以上两步,就完成了 springSecurityFilterChain 拦截器的注册,这个拦截器的名字,如果用配置文件配置,名字是不可以变的,这里用官网的教程,直接写上面的两个类,就可以完成 springSecurityFilterChain的注册;


    配置身份验证

    在之前的第一步的 WebSecurityConfig 类里面,我们配置了一个用户身份信息,现在,我们需要告诉 Spring Security 都对哪些 URL 进行校验;

    我们让我们写的 WebSecurityConfig 类,再继承 WebSecurityConfigurerAdapter类,覆写 configure(HttpSecurity http) 方法,在里面进行配置 URL

    package cn.hyc.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    import org.springframework.security.core.userdetails.User;
    import org.springframework.security.core.userdetails.UserDetailsService;
    import org.springframework.security.provisioning.InMemoryUserDetailsManager;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    
    /**
     * 跟 springSecurityFilterChain 有关的  过滤器
     */
    @EnableWebSecurity
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter implements WebMvcConfigurer {
    
        /**
         * 认证用户信息
         * @return
         */
        @Bean
        public UserDetailsService userDetailsService() {
            InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
            manager.createUser(User.withDefaultPasswordEncoder().username("user").password("password").roles("USER").build());
            return manager;
        }
    
        /**
         * 对 哪些 URL 进行身份验证
         * @param http
         * @throws Exception
         */
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                    .authorizeRequests()
                    .anyRequest().authenticated()
                    .and()
                    .formLogin()
                    .and()
                    .logout()
                        .logoutUrl("/logout")
                    .and()
                    .httpBasic();
        }
    
    }
    
    

    加载配置

    我们的 WebSecurityConfig 类,就是一个配置类,我们需要将它加载到容器里面,使用下面的类,去完成加载;

    package cn.hyc.config;
    
    import org.springframework.lang.Nullable;
    import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
    
    /**
     * 确保 WebSecurityConfig.class 得到加载
     */
    public class MvcWebApplicationInitializer extends
            AbstractAnnotationConfigDispatcherServletInitializer {
    
        @Override
        protected Class<?>[] getRootConfigClasses() {
        // 这里,写上配置类的名字
            return new Class[] { WebSecurityConfig.class };
        }
    
        @Nullable
        @Override
        protected Class<?>[] getServletConfigClasses() {
            return new Class[0];
        }
    
        @Override
        protected String[] getServletMappings() {
            return new String[0];
        }
    
        // ... other overrides ...
    }
    

    登陆项目

    这时候启动项目,可以看到下面的界面,并且我们访问任何 URL ,都会被拦截,然后重定向到这里,因为我们没有通过身份验证:

    在这里插入图片描述

    因为我们自己没有写页面,也没做任何控制层的处理,直接访问,spring Security 会自动的生成一个登陆页面,并且会帮我们进行用户名、密码的校验;

    身份验证成功以后,spring security会调到我们自己没验证的时候,想要访问的页面;

    这里我们是基于内存用户登陆的,因为前面的配置类里面,配置的就是在内存中用户,暂时不涉及到 JDBC 操作 ;


    退出

    spring security中,默认访问 /logout 即代表你要退出:

    在这里插入图片描述

    ,然后默认的重定向到 /login?logout
    在这里插入图片描述

    当然上面这些,我们也可以在在配置里面,进行自定义,怎么配置,在 大概了解下 spring secutity 文档 里面都有讲,不再累述;

  • 相关阅读:
    怎样在delphi中实现控件和窗体的拖拽
    Ecshop出现问题 includeslib_main.php on line 1329 includeslib_base.php on line
    Scrollbox的滚动条事件scrollbar事件的处理(Lazarus)
    TControl.WMLButtonUp的inherited的作用——是为了给子类控件新的处理消息的机会
    信号槽的被连接几次,就会执行几次(有空要仔细研究connect的各种用法)
    追踪CM_CONTROLCHANGE消息的产生和执行过程,可以较好的领会VCL的思想(就是到处通知,但耦合性很弱)
    TControl的显示函数(5个非虚函数,4个虚函数)和三个例子的执行过程(包括SetParent的例子)
    js广告轮询效果
    TWinControl的刷新过程(5个非虚函数,4个覆盖函数,1个消息函数,默认没有双缓冲,注意区分是TCustomControl还是Windows原生封装控件,执行流程不一样)
    Delphi控件的透明与不透明(要挨个解释一下原因),对InvalidateControl的关键理解
  • 原文地址:https://www.cnblogs.com/young-youth/p/11665593.html
Copyright © 2011-2022 走看看