12.Spring Security应用详解-集成SpringBoot

集成Springboot

SpringBoot介绍

  • SpringBoot是一套Spring的快速开发框架,基于Spring4.0设计,使用SpringBoot开发的可以避免一些繁琐的工程搭建和配置,同时它集成了大量的常用框架,快速导入依赖包,避免依赖包的冲突。基本上常用的开发框架都支持SpringBoot开发,例如:Mybatis,Bubbo等,Spring家族更是如此,例如:Spring Cloud,Spring Mvc,Spring Security等,使用Spring Boot开发可以大大提高生产率,所以Spring Boot的使用率非常高。
  • 本章节讲解通过Spring Boot开发Spring Security应用,Spring Boot提供spring-boot-starter-securit用于开发Spring Security应用。

创建maven工程

  • 1)创建maven工程security-spring-boot,工程结构如下:


    image
  • 2)引入以下依赖


    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.2.2.RELEASE
         
    
    com.stan.security
    security-spring-boot
    0.0.1-SNAPSHOT
    security-spring-boot
    Demo project for Spring Boot

    
        UTF-8
        1.8
        1.8
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            org.springframework.boot
            spring-boot-starter-security
        
        

        
        
            javax.servlet
            javax.servlet-api
            provided
        
        

        
        
            javax.servlet
            jstl
        
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


spring容器配置

  • SpringBoot工程启动会自动扫描启动类所在包下的所有Bean,加载到Spring容器。
  • 1)Spring Boot配置文件
  • 在resources下添加application.xml,内容如下:
server:
  port: 8080
  servlet:
    context-path: /security-springboot
spring:
  application:
    name: security-springboot
  • 2)Spring Boot启动类
@SpringBootApplication
public class SecurityApplication {
    public static void main(String[] args) {
        SpringApplication.run(SecurityApplication.class, args);
    }
}

Servlet Context配置

  • 由于Spring boot starter自动配置机制,这里无需使用@EnableWebMvc与@ComponentScan,WebConfig如下
@Configuration
public class WebConfig implements WebMvcConfigurer {
    /**
     * 默认Url根路径跳转到/login,此url为spring security提供
     * @param registry
     */
    public void addViewControllers(ViewControllerRegistry registry){
        registry.addViewController("/").setViewName("redirect:/login");
    }
}
  • 视频解析器配置在application.xml中
spring:
  mvc:
    view:
      prefix: /WEB-INF/view/
      suffix: .jsp

安全配置

  • 由于Spring boot starter自动装配机制,这里无需使用@EnableWebSecurity,WebSecurityConfig内容如下
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    //定义用户信息服务(查询用户信息)
    @Bean
    public UserDetailsService userDetailsService(){
        InMemoryUserDetailsManager manager=new InMemoryUserDetailsManager();
        manager.createUser(User.withUsername("zs").password("123").authorities("p1").build());
        manager.createUser(User.withUsername("ls").password("123").authorities("p2").build());
        return manager;
    }

    //密码编码器
    @Bean
    public PasswordEncoder passwordEncoder(){
        return NoOpPasswordEncoder.getInstance();
    }

    //安全拦截机制(最重要)
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/r/r1").hasAnyAuthority("p1")
                .antMatchers("/r/r2").hasAnyAuthority("p2")
                .antMatchers("/r/**").authenticated()//所有/r/**的请求必须认证通过
                .anyRequest().permitAll()//除了/r/**,其他的请求可以访问
                .and()
                .formLogin()//允许表单登录
                .successForwardUrl("/login-success");//自定义登录成功的页面地址
    }
}

你可能感兴趣的:(12.Spring Security应用详解-集成SpringBoot)