美文网首页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