美文网首页Spring Security Oauth2.0认证授权
12.Spring Security应用详解-集成SpringB

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

作者: LANSHENGYANG | 来源:发表于2020-03-19 16:02 被阅读0次

    集成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)引入以下依赖
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.2.2.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.stan.security</groupId>
        <artifactId>security-spring-boot</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>security-spring-boot</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--spring security依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-security</artifactId>
            </dependency>
            <!--end-->
    
            <!--jsp依赖-->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <scope>provided</scope>
            </dependency>
            <!--end-->
    
            <!--jsp页面使用jstl标签-->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
            </dependency>
            <!--end-->
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    

    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应用详解-集成SpringB

        本文链接:https://www.haomeiwen.com/subject/yvelyhtx.html