zoukankan      html  css  js  c++  java
  • springboot security

    什么是springboot security

    Spring Security是针对Spring项目的安全框架,也是Spring Boot底层安全模块默认的技术选型。他可以实现强大的web安全控制。对于安全控制,
    我们仅需引入spring-boot-starter-security模块,进行少量的配置,即可实现强大的安全管理。
     
    工作流程

    WebSecurityConfigurerAdapter:自定义Security策略

    AuthenticationManagerBuilder:自定义认证策略

    @EnableWebSecurity:开启WebSecurity模式

    WEB&安全

    1. 登陆/注销

      HttpSecurity配置登陆、注销功能

    2. Thymeleaf提供的SpringSecurity标签支持

      需要引入thymeleaf-extras-springsecurity4

      sec:authentication=“name”获得当前用户的用户名

      sec:authorize=“hasRole(‘ADMIN’)”当前用户必须拥有ADMIN权限时才会显示标签内容

    3. remember me

      表单添加remember-me的checkbox

      配置启用remember-me功能

    4. CSRF(Cross-site request forgery)跨站请求伪造

      HttpSecurity启用csrf功能,会为表单添加_csrf的值,提交携带来预防CSRF;

      实例代码

      安全配置类
      @EnableWebSecurity
      public class MySecurityConfig extends WebSecurityConfigurerAdapter {
      
          @Override
          protected void configure(HttpSecurity http) throws Exception {
              //super.configure(http);
              //定制请求的授权规则
              http.authorizeRequests().antMatchers("/").permitAll()
                      .antMatchers("/level1/**").hasRole("VIP1")
                      .antMatchers("/level2/**").hasRole("VIP2")
                      .antMatchers("/level3/**").hasRole("VIP3");
      
              //开启自动配置的登陆功能,效果,如果没有登陆,没有权限就会来到登陆页面
              http.formLogin().usernameParameter("user").passwordParameter("pwd").loginPage("/userlogin");
              //1、 /login 来到登陆页
              //2、重定向到/login?error表示登陆失败
              //3、更多详细功能
              //4、默认post形式的 /login 代表处理登陆
              //5、一旦定制loginPage  那么 loginPage的post请求就是登陆
      
      
              //开启自动配置的注销功能
              http.logout().logoutSuccessUrl("/"); //注销成功以后来到首页
              //1、访问/logout 表示用户注销。清空 session
              //2、注销成功会返回 /login?logout 页面
              //3、默认post形式的 /login代表处理登陆
      
      
              //开启记住我功能
              http.rememberMe().rememberMeParameter("remeber");
              //登陆成功以后,将cookie发给浏览器保存,以后访问页面带上这个cookie,只要通过检查就可以免登陆
              //点击注销会删除cookie
          }
      
          //定义认证规则
          @Override
          protected void configure(AuthenticationManagerBuilder auth) throws Exception {
              //super.configure(auth);
      
              //auth.jdbcAuthentication()...
              auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())   //在Spring Security 5.0中新增了多种加密方式,页改变了密码的格式
                      .withUser("zhangsan").password(new BCryptPasswordEncoder().encode("123456")).roles("VIP1", "VIP2")
                      .and()
                      .withUser("lisi").password(new BCryptPasswordEncoder().encode("123456")).roles("VIP2", "VIP3")
                      .and()
                      .withUser("wangwu").password(new BCryptPasswordEncoder().encode("123456")).roles("VIP1", "VIP3");
          }
      }
      
      启动类:
      /**
       * 1、引入SpringSecurity;
       * 2、编写SpringSecurity配置
       *       @EnableWebSecurity extends WebSecurityConfigurerAdapter
       * 3、控制请求的访问权限
       *
       */
      @SpringBootApplication
      public class SecurityApplication {
      
       public static void main(String[] args) {
           SpringApplication.run(SecurityApplication.class, args);
       }
      
      }






  • 相关阅读:
    04-树7 二叉搜索树的操作集
    04-树6 Complete Binary Search Tree
    04-树5 Root of AVL Tree
    04-树4 是否同一棵二叉搜索树
    05-树8 File Transfer
    05-树7 堆中的路径
    二叉树的非递归遍历(先序、中序、后序和层序遍历)
    队列的定义与操作——顺序存储和链式存储
    Maven项目的核心pom.xml解释(转)
    eclipse安装插件的三种方式
  • 原文地址:https://www.cnblogs.com/Soul-xs/p/12237305.html
Copyright © 2011-2022 走看看