Spring Security技术栈开发企业级认证与授权(一)环境搭建

Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoCDI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。

本篇博客主要记录的是学习利用Spring Security技术栈开发企业级认证与授权。这篇博客的主要内容是搭建环境。

一、项目组织结构

下图展示了项目的组织结构,其中lemon-security为聚合项目,打包方式为pom,其他四个项目为子模块,都是lemon-security的子模块,打包方式均为jar
Spring Security技术栈开发企业级认证与授权(一)环境搭建_第1张图片
下面简要说明各个项目的基本作用:

项目 作用
lemon-security 聚合项目,主要控制整个项目所需依赖的版本
lemon-security-core 认证与授权的核心模块
lemon-security-browser 浏览器作为客户端的认证与授权模块,依赖lemon-security-core模块
lemon-security-app 移动端作为客户端的认证与授权模块,依赖lemon-security-core模块
lemon-security-demo 案例模块,依赖lemon-security-browserlemon-security-app模块

二、依赖

  • lemon-securitypom依赖

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>com.lemon.securitygroupId>
    <artifactId>lemon-securityartifactId>
    <version>1.0.0-SNAPSHOTversion>
    <modules>
        <module>../lemon-security-coremodule>
        <module>../lemon-security-browsermodule>
        <module>../lemon-security-appmodule>
        <module>../lemon-security-demomodule>
    modules>
    <packaging>pompackaging>
    <description>Spring Security技术栈开发企业级认证与授权POM项目description>

    <properties>
        <lemon.security.version>1.0.0-SNAPSHOTlemon.security.version>
    properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.spring.platformgroupId>
                <artifactId>platform-bomartifactId>
                <version>Brussels-SR7version>
                <type>pomtype>
                <scope>importscope>
            dependency>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>Edgware.SR2version>
                <type>pomtype>
                <scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-compiler-pluginartifactId>
                <version>3.7.0version>
                <configuration>
                    <source>1.8source>
                    <target>1.8target>
                    <encoding>UTF-8encoding>
                configuration>
            plugin>
        plugins>
    build>

project>

这个pom文件中主要涉及到的就是版本控制,这里引进了Spring平台的版本控制,和Spring Cloud版本控制,整个项目是基于Spring Boot进行开发的。

  • lemon-security-corepom依赖

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <parent>
        <groupId>com.lemon.securitygroupId>
        <artifactId>lemon-securityartifactId>
        <version>1.0.0-SNAPSHOTversion>
        <relativePath>../lemon-securityrelativePath>
    parent>

    <artifactId>lemon-security-coreartifactId>
    <version>1.0.0-SNAPSHOTversion>
    <packaging>jarpackaging>
    <description>Spring Security技术栈开发企业级认证与授权CORE项目description>

    <dependencies>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-oauth2artifactId>
        dependency>

        
        
            
            
        

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-jdbcartifactId>
        dependency>

        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.socialgroupId>
            <artifactId>spring-social-configartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.socialgroupId>
            <artifactId>spring-social-coreartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.socialgroupId>
            <artifactId>spring-social-securityartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.socialgroupId>
            <artifactId>spring-social-webartifactId>
        dependency>

        
        <dependency>
            <groupId>org.apache.commonsgroupId>
            <artifactId>commons-lang3artifactId>
        dependency>

        <dependency>
            <groupId>org.apache.commonsgroupId>
            <artifactId>commons-collections4artifactId>
            <version>4.1version>
        dependency>

        <dependency>
            <groupId>commons-beanutilsgroupId>
            <artifactId>commons-beanutilsartifactId>
        dependency>

    dependencies>
project>
  • lemon-security-browserpom依赖

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <parent>
        <groupId>com.lemon.securitygroupId>
        <artifactId>lemon-securityartifactId>
        <version>1.0.0-SNAPSHOTversion>
        <relativePath>../lemon-securityrelativePath>
    parent>

    <artifactId>lemon-security-browserartifactId>
    <version>1.0.0-SNAPSHOTversion>
    <packaging>jarpackaging>
    <description>Spring Security技术栈开发企业级认证与授权浏览器项目description>

    <dependencies>
        <dependency>
            <groupId>com.lemon.securitygroupId>
            <artifactId>lemon-security-coreartifactId>
            <version>${lemon.security.version}version>
        dependency>

        
        <dependency>
            <groupId>org.springframework.sessiongroupId>
            <artifactId>spring-sessionartifactId>
        dependency>

    dependencies>

project>
  • lemon-security-apppom依赖

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <parent>
        <groupId>com.lemon.securitygroupId>
        <artifactId>lemon-securityartifactId>
        <version>1.0.0-SNAPSHOTversion>
        <relativePath>../lemon-securityrelativePath>
    parent>

    <artifactId>lemon-security-appartifactId>
    <version>1.0.0-SNAPSHOTversion>
    <packaging>jarpackaging>
    <description>Spring Security技术栈开发企业级认证与授权移动端项目description>

    <dependencies>
        <dependency>
            <groupId>com.lemon.securitygroupId>
            <artifactId>lemon-security-coreartifactId>
            <version>${lemon.security.version}version>
        dependency>
    dependencies>
    
project>
  • lemon-security-demopom依赖

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <parent>
        <groupId>com.lemon.securitygroupId>
        <artifactId>lemon-securityartifactId>
        <version>1.0.0-SNAPSHOTversion>
        <relativePath>../lemon-securityrelativePath>
    parent>

    <artifactId>lemon-security-demoartifactId>
    <version>${lemon.security.version}version>
    <packaging>jarpackaging>
    <description>Spring Security技术栈开发企业级认证与授权案例项目description>

    <dependencies>
        
        <dependency>
            <groupId>com.lemon.securitygroupId>
            <artifactId>lemon-security-browserartifactId>
            <version>${lemon.security.version}version>
        dependency>

        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druid-spring-boot-starterartifactId>
            <version>1.1.9version>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
        dependency>

    dependencies>

    <build>
        <plugins>
            
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <version>1.5.10.RELEASEversion>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackagegoal>
                        goals>
                    execution>
                executions>
            plugin>
        plugins>
    build>

project>

三、编写Spring Boot应用入口

在包com.lemon.security.web.application下编写MainApplication.java如下:

package com.lemon.security.web.application;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

/**
 * @author lemon
 * @date 2018/3/18 下午5:44
 */
@SpringBootApplication
@ComponentScan(basePackages = {"com.lemon.security"})
public class MainApplication {

    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class, args);
    }
}

再在包com.lemon.security.web.controller下编写一个DemoController.java如下:

package com.lemon.security.web.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author lemon
 * @date 2018/3/18 下午5:46
 */
@Controller
public class DemoController {

    @GetMapping("/hello")
    @ResponseBody
    public String hello() {
        return "Hello Spring Security";
    }
}

当然,还要写一个Spring Boot的配置文件,内容如下:

spring:
  profiles:
    active: dev

---
spring:
  profiles: dev
  # 数据库配置
  datasource:
    driverClassName: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/spring-security?characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456
    # 配置Druid连接池
    type: com.alibaba.druid.pool.DruidDataSource
server:
  port: 8080

需要将上面的数据库连接设置修改为自己的即可。
这时候运行Spring BootMain方法,会发现报了如下的错误:

Caused by: java.lang.IllegalArgumentException: No Spring Session store is configured: set the 'spring.session.store-type' property

这是由于lemon-security-core中加入了Spring Session的依赖,而没有配置Session的存储方式导致出错,我们在Spring Boot的配置文件加入下面的内容即可,内容如下:

spring: 
	session:
	    store-type: none

完整的配置文件为:

spring:
  profiles:
    active: dev

---
spring:
  profiles: dev
  # 数据库配置
  datasource:
    driverClassName: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.25.133:3306/spring-security?characterEncoding=utf-8&useSSL=false
    username: root
    password: caifutong122819
    # 配置Druid连接池
    type: com.alibaba.druid.pool.DruidDataSource
  # 配置session存储方式,暂时关掉该功能
  session:
    store-type: none
server:
  port: 8080

这时候重新启动应用就可以正常启动了,到浏览器运行http://localhost:8080/hello发现需要输入用户名和密码才可以访问DemoControllerhello方法,这是由于在Spring Boot环境下Spring Security的默认配置,也就是需要经过验证在可以访问方法。如图所示:
Spring Security技术栈开发企业级认证与授权(一)环境搭建_第2张图片
由于是前期环境,暂时可以关闭权限验证功能,这需要在配置文件中设置一下即可:

# 首先将权限验证关闭
security:
  basic:
    enabled: false

这时候重新启动应用就可以正常启动了,到浏览器运行http://localhost:8080/hello发现浏览器上显示了Hello Spring Security

Spring Security技术栈开发企业级认证与授权系列文章列表:

Spring Security技术栈开发企业级认证与授权(一)环境搭建
Spring Security技术栈开发企业级认证与授权(二)使用Spring MVC开发RESTful API
Spring Security技术栈开发企业级认证与授权(三)表单校验以及自定义校验注解开发
Spring Security技术栈开发企业级认证与授权(四)RESTful API服务异常处理
Spring Security技术栈开发企业级认证与授权(五)使用Filter、Interceptor和AOP拦截REST服务
Spring Security技术栈开发企业级认证与授权(六)使用REST方式处理文件服务
Spring Security技术栈开发企业级认证与授权(七)使用Swagger自动生成API文档
Spring Security技术栈开发企业级认证与授权(八)Spring Security的基本运行原理与个性化登录实现
Spring Security技术栈开发企业级认证与授权(九)开发图形验证码接口
Spring Security技术栈开发企业级认证与授权(十)开发记住我功能
Spring Security技术栈开发企业级认证与授权(十一)开发短信验证码登录
Spring Security技术栈开发企业级认证与授权(十二)将短信验证码验证方式集成到Spring Security
Spring Security技术栈开发企业级认证与授权(十三)Spring Social集成第三方登录验证开发流程介绍
Spring Security技术栈开发企业级认证与授权(十四)使用Spring Social集成QQ登录验证方式
Spring Security技术栈开发企业级认证与授权(十五)解决Spring Social集成QQ登录后的注册问题
Spring Security技术栈开发企业级认证与授权(十六)使用Spring Social集成微信登录验证方式

示例代码下载地址:

项目已经上传到码云,欢迎下载,内容所在文件夹为chapter001

更多干货分享,欢迎关注我的微信公众号:爪哇论剑(微信号:itlemon)
Spring Security技术栈开发企业级认证与授权(一)环境搭建_第3张图片

你可能感兴趣的:(Spring,Security,Spring)