1. 程式人生 > 程式設計 >基於Spring Boot保護Web應用程式

基於Spring Boot保護Web應用程式

如果在類路徑上添加了Spring Boot Security依賴項,則Spring Boot應用程式會自動為所有HTTP端點提供基本身份驗證。端點“/”和“/home”不需要任何身份驗證。所有其他端點都需要身份驗證。

要將Spring Boot Security新增到Spring Boot應用程式,需要在構建配置檔案中新增Spring Boot Starter Security依賴項。

Maven使用者可以在pom.xml 檔案中新增以下依賴項。

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

XML

Gradle使用者可以在build.gradle 檔案中新增以下依賴項。

compile("org.springframework.boot:spring-boot-starter-security")

保護Web應用程式

首先,使用Thymeleaf模板建立不安全的Web應用程式。

然後,在 src/main/resources/templates 目錄下建立一個home.html 檔案。

<!DOCTYPE html>
<html xmlns = "http://www.w3.org/1999/xhtml" 
  xmlns:th = "http://www.thymeleaf.org" 
  xmlns:sec = "http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
  <head>
   <title>Spring Security示例</title>
  </head>
  <body>
   <h1>歡迎您!</h1>
   <p>點選 <a th:href = "@{/hello}">這裡</a> 看到問候語.</p>
  </body>
</html>

HTML

使用Thymeleaf模板在HTML檔案中定義的簡單檢視/hello。現在,在src/main/resources/templates目錄下建立一個檔案:hello.html。

<!DOCTYPE html>
<html xmlns = "http://www.w3.org/1999/xhtml" 
  xmlns:th = "http://www.thymeleaf.org" 
  xmlns:sec = "http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
  <head>
   <title>Hello World!</title>
  </head>
  <body>
   <h1>Hello world!</h1>
  </body>
</html>

HTML

現在,需要為Home和hello檢視設定Spring MVC - View控制器。為此,建立一個擴充套件WebMvcConfigurerAdapter的MVC配置檔案。

package com.yiibai.websecuritydemo;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {
  @Override
  public void addViewControllers(ViewControllerRegistry registry) {
   registry.addViewController("/home").setViewName("home");
   registry.addViewController("/").setViewName("home");
   registry.addViewController("/hello").setViewName("hello");
   registry.addViewController("/login").setViewName("login");
  }
}

Java

現在,將Spring Boot Starter安全依賴項新增到構建配置檔案中。Maven使用者可以在pom.xml 檔案中新增以下依賴項。

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

XML

Gradle使用者可以在build.gradle 檔案中新增以下依賴項。

compile("org.springframework.boot:spring-boot-starter-security")

現在,建立一個Web安全配置檔案,該檔案用於保護應用程式以使用基本身份驗證訪問HTTP端點。

package com.yiibai.websecuritydemo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
  @Override
  protected void configure(HttpSecurity http) throws Exception {
   http
     .authorizeRequests()
      .antMatchers("/","/home").permitAll()
      .anyRequest().authenticated()
      .and()
     .formLogin()
      .loginPage("/login")
      .permitAll()
      .and()
      .logout()
      .permitAll();
  }
  @Autowired
  public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
   auth
     .inMemoryAuthentication()
     .withUser("user").password("password").roles("USER");
  }
}

Java

現在,在src/main/resources 目錄下建立一個login.html 檔案,以允許使用者通過登入螢幕訪問HTTP端點。

<!DOCTYPE html>
<html xmlns = "http://www.w3.org/1999/xhtml" xmlns:th = "http://www.thymeleaf.org"
  xmlns:sec = "http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">

  <head>
   <title>Spring Security示例</title>
  </head>
  <body>
   <div th:if = "${param.error}">
     無效的使用者名稱和密碼.
   </div>
   <div th:if = "${param.logout}">
     你已經登出.
   </div>

   <form th:action = "@{/login}" method = "post">
     <div>
      <label> 使用者名稱 : <input type = "text" name = "username"/> </label>
     </div>
     <div>
      <label> 密碼: <input type = "password" name = "password"/> </label>
     </div>
     <div>
      <input type = "submit" value = "登入"/>
     </div>
   </form>
  </body>
</html>

HTML

最後,更新hello.html 檔案 - 允許使用者從應用程式登出並顯示當前使用者名稱,如下所示 -

<!DOCTYPE html>
<html xmlns = "http://www.w3.org/1999/xhtml" xmlns:th = "http://www.thymeleaf.org" 
  xmlns:sec = "http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">

  <head>
   <title>Hello World!</title>
  </head>
  <body>
   <h1 th:inline = "text">您好,[[${#httpServletRequest.remoteUser}]]!</h1>
   <form th:action = "@{/logout}" method = "post">
     <input type = "submit" value = "登出"/>
   </form>
  </body>

</html>

HTML

主 Spring Boot應用程式的程式碼如下 -

package com.yiibai.websecuritydemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

Java

下面給出了構建配置檔案的完整程式碼。

Maven構建檔案 - pom.xml 的內容如下:

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

  <modelVersion>4.0.0</modelVersion>
  <groupId>com.yiibai</groupId>
  <artifactId>websecurity-demo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>websecurity-demo</name>
  <description>Demo project for Spring Boot</description>

  <parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>1.5.9.RELEASE</version>
   <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <properties>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
   <java.version>1.8</java.version>
  </properties>

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

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

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

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

   <dependency>
     <groupId>org.springframework.security</groupId>
     <artifactId>spring-security-test</artifactId>
     <scope>test</scope>
   </dependency>
  </dependencies>

  <build>
   <plugins>
     <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
     </plugin>
   </plugins>
  </build>

</project>

XML

Gradle構建檔案 – build.gradle

buildscript {
  ext {
   springBootVersion = ‘1.5.9.RELEASE‘
  }
  repositories {
   mavenCentral()
  }
  dependencies {
   classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
  }
}

apply plugin: ‘java‘
apply plugin: ‘eclipse‘
apply plugin: ‘org.springframework.boot‘

group = ‘com.yiibai‘
version = ‘0.0.1-SNAPSHOT‘
sourceCompatibility = 1.8

repositories {
  mavenCentral()
}
dependencies {
  compile(‘org.springframework.boot:spring-boot-starter-security‘)
  compile(‘org.springframework.boot:spring-boot-starter-thymeleaf‘)
  compile(‘org.springframework.boot:spring-boot-starter-web‘)

  testCompile(‘org.springframework.boot:spring-boot-starter-test‘)
  testCompile(‘org.springframework.security:spring-security-test‘)
}

現在,建立一個可執行的JAR檔案,並使用以下Maven或Gradle命令執行Spring Boot應用程式。

Maven使用者請使用下面給出的命令 -

mvn clean install

Shell

在“BUILD SUCCESS”之後,可以在target目錄下找到JAR檔案。
Gradle使用者可以使用如下所示的命令 -

gradle clean build

在“BUILD SUCCESSFUL”之後,可以在build/libs 目錄下找到JAR檔案。

現在,使用下面顯示的命令執行JAR檔案 -

java –jar <JARFILE>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。