SpringBoot集成Spring Security

SpringBoot集成Spring Security

第一步:导入依赖

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-security</artifactId>
</dependency>

<dependency>
 <groupId>io.jsonwebtoken</groupId>
 <artifactId>jjwt</artifactId>
 <version>${jwt.version}</version>
</dependency>

 

1.写controller层测试

 

注意:1.如果版本springboot为2.5.4过高,会直接跳过springsecurity的登录界面,报错为找不到页面4042.需要自己配置用户名和密码


spring:
security:
  user:
    name: admin
    password: 123456

注意:认证默认的加密方式为:Base64

2.定制首页,登录页


package com.example.rity.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;


/**
* @author 杨明书
* @Date 2021/09/02 10:36
*/
@Configuration
public class SecuriryConfig extends WebSecurityConfigurerAdapter {


   @Override
   protected void configure(HttpSecurity http) throws Exception {
       http.authorizeRequests()
              .anyRequest()
              .authenticated()
              .and()
              .formLogin()
               //配置登录页
              .loginPage("")
              .permitAll()

              .and()
              .logout()
              .logoutUrl("")
              .logoutSuccessUrl("")
              .permitAll();
  }

}

thymeleaf的头部:<html xmlns:th="http://www.thymeleaf.org">


@Configuration
public class MvcConfig implements WebMvcConfigurer {

 /**
    * 重写接口,把html加载到controller中
    * @param registry
    */

 @Override
 public void addViewControllers(ViewControllerRegistry registry){
   registry.addViewController("/").setViewName("user/login");
   registry.addViewController("/admin/login").setViewName("/admin/login");
   registry.addViewController("/admin/home").setViewName("/admin/home");
   registry.addViewController("/user/login").setViewName("/user/login");
   registry.addViewController("/user/home").setViewName("/user/home");

}


}

 



/**
* @author 杨明书
* @Date 2021/09/02 11:57
*/
@Configuration
public class AdminConfig{

   @Configuration
   @Order(1)
   public  static class AdminSecurityConfig extends  WebSecurityConfigurerAdapter{

     @Override
     protected   void configure(HttpSecurity http) throws Exception{
         http.antMatcher("/admin/**")
                .authorizeRequests()
                .antMatchers("/css/**").permitAll()
                .anyRequest()
                .authenticated()
                 //登录
                .and()
                .formLogin()
                .loginPage("/admin/login")
                .defaultSuccessUrl("/admin/home")
                .permitAll()
                 //退出
                .and()
                .logout()
                .logoutUrl("/admin/logout")
                .permitAll();
    }

  }

 

* SpringSecurity 的核心功能
* (1)认证(你是谁,用户/设备/系统)
* (2)验证(你能干什么,也叫权限控制、授权、允许执行的操作)
* (3)攻击防护(防止伪造省份)
* (4)认证功能、授权功能、加密功能、会话功能、缓存功能、remeberMe功能

3.加密

    @Test
void contextLoads() {
 //对密码进行加密
 PasswordEncoder pw = new BCryptPasswordEncoder();
 String encode = pw.encode("123456");
 System.out.println(encode);
 boolean matches = pw.matches("123456", encode);
 System.out.println(matches);


  }
package com.exa.yms.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

/**
* @author 杨明书
* @Date 2021/09/03 10:28
* WebSecurityConfigurerAdapter最重要,所有的东西依赖它
*/
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {


//   @Autowired
//   private UserServiceImpl service;

   /**
    * 配置密码加密的config,别忘记@Bean注入,否则不生效
    * @return
    */
   @Bean
   public PasswordEncoder pw(){
       return new BCryptPasswordEncoder();
  }

   /**
    * 自定义登录,需要重写这个方法
    * @param http
    * @throws Exception
    */
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    //表单登录
       http.formLogin()
               //自定义登录
              .loginPage("/login.html")
               //自定义登录逻辑
              .loginProcessingUrl("/login")
               //登录成功后跳转的页面
              .defaultSuccessUrl("/main.html");
//               //登录失败跳转的页面
//               .failureForwardUrl("error.html");
//               //自定义登录名
//               .usernameParameter("admin123")
//               //自定义密码
//               .passwordParameter("password123");
       //授权
       http.authorizeRequests()
               //放行
              .antMatchers("/login.html").permitAll()
               /*?:匹配一个字符
                * “*”匹配0个或多个字符
                * “**”匹配0个或多个目录
                */
               //正则
              .regexMatchers("").permitAll()
               //mvc
               //.antMatchers("/images/**/*.jpg").permitAll()
               //放行失败页面
              .antMatchers("error.html").permitAll()
               //所有的请求都必须要被认证(登录)
              .anyRequest().authenticated();


       //记住我的功能
       // http.rememberMe()
       // http.rememberMe()
               //自定义参数
               //.rememberMeParameter()
               //自定义失效时间,默认为两周
               //.tokenValiditySeconds()
               //自定义登录
               // .userDetailsService(userService)
               //.configure();
       //退出登录
       http.logout()
               //退出登录的url
              .logoutUrl("/logout")
               //退出登录成功跳转的url
              .logoutSuccessUrl("/login.html");
       //关闭csrf防火墙,跨域
       http.csrf().disable();


  }

}

 

 

posted @ 2021-09-03 18:10  এএ᭄念卿এএ᭄  阅读(312)  评论(0编辑  收藏  举报