Springboot專案中需整合的依賴集和檔案配置

紅豆吧發表於2020-10-25

(一)springboot專案中需整合的依賴集

1. 整合Mysql資料庫的依賴

<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.20</version>
        </dependency>

2. 整合Mybatis的依賴

 <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>

3. 整合druid資料庫的依賴

Druid的簡介:

Druid首先是一個資料庫連線池。Druid是目前最好的資料庫連線池,在功能、效能、擴充套件性方面,都超過其他資料庫連線池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid已經在阿里巴巴部署了超過600個應用,經過一年多生產環境大規模部署的嚴苛考驗。Druid是阿里巴巴開發的號稱為監控而生的資料庫連線池!

Druid的功能:

  1. 替換DBCP和C3P0。Druid提供了一個高效、功能強大、可擴充套件性好的資料庫連線池。

  2. 可以監控資料庫訪問效能,Druid內建提供了一個功能強大的StatFilter外掛,能夠詳細統計SQL的執行效能,這對於線上分析資料庫訪問效能有幫助。

  3. 資料庫密碼加密。直接把資料庫密碼寫在配置檔案中,這是不好的行為,容易導致安全問題。DruidDruiver和DruidDataSource都支援PasswordCallback。

  4. SQL執行日誌,Druid提供了不同的LogFilter,能夠支援Common-Logging、Log4j和JdkLog,你可以按需要選擇相應的LogFilter,監控你應用的資料庫訪問情況。

  5. 擴充套件JDBC,如果你要對JDBC層有程式設計的需求,可以通過Druid提供的Filter機制,很方便編寫JDBC層的擴充套件外掛。

所以Druid可以:
1、充當資料庫連線池。
2、可以監控資料庫訪問效能
3、獲得SQL執行日誌

 <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.22</version>
        </dependency>

4. 整合lombok資料庫的依賴

lombok是一個可以通過簡單的註解的形式來幫助我們簡化消除一些必須有但顯得很臃腫的 Java 程式碼

註解種類:

具體請參考官方文件

@Setter

@Getter

@Data

@Log(這是一個泛型註解,具體有很多種形式)

@AllArgsConstructor

@NoArgsConstructor

@EqualsAndHashCode

@NonNull

@Cleanup

@ToString

@RequiredArgsConstructor

@Value

@SneakyThrows

@Synchronized


<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>

5. 整合Shiro資料庫的依賴

shiro的簡介:

它是一個功能強大且易於使用的Java安全框架,可以執行身份驗證、授權、加密和會話管理。使用Shiro易於理解的API,您可以快速且輕鬆地保護任何應用程式——從最小的移動應用程式到最大的web和企業應用程式。

shiro的主要功能:

  1. Authentication:身份認證

  2. Authorization:許可權校驗

  3. SessionManager:會話管理,使用者從登入到退出是一次會話,所有的資訊都儲存在會話中。普通的java se環境中也支援這種會話。

  4. cryptography:資料加密,如對使用者密碼進行加密,避免將密碼明文存入資料庫中。

  5. Web support:非常容易整合到web環境中。

  6. Caching:快取,將使用者資訊和角色許可權等快取起來,不必每次去查

  7. Concurrency:支援多執行緒,在一個執行緒中開啟新的執行緒,能把許可權傳過去。

  8. Testing:提供測試功能

  9. Run As:允許一個使用者假裝為另一個使用者的身份進行訪問。

  10. Remember me: 記住使用者,一次登入後下次不用登入。

<dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>1.5.3</version>
        </dependency>

6. 整合thymeleaf資料庫的依賴

thymeleaf的簡介:

Thymeleaf 是一個跟 Velocity、FreeMarker 類似的模板引擎,它可以完全替代 JSP 。相較與其他的模板引擎,它有如下三個極吸引人的特點:

thymeleaf的功能:

  1. Thymeleaf 在有網路和無網路的環境下皆可執行,即它可以讓美工在瀏覽器檢視頁面的靜態效果,也可以讓程式設計師在伺服器檢視帶資料的動態頁面效果。這是由於它支援 html 原型,然後在 html 標籤裡增加額外的屬性來達到模板+資料的展示方式。瀏覽器解釋 html 時會忽略未定義的標籤屬性,所以 thymeleaf 的模板可以靜態地執行;當有資料返回到頁面時,Thymeleaf 標籤會動態地替換掉靜態內容,使頁面動態顯示。

  2. Thymeleaf 開箱即用的特性。它提供標準和spring標準兩種方言,可以直接套用模板實現JSTL、 OGNL表示式效果,避免每天套模板、該jstl、改標籤的困擾。同時開發人員也可以擴充套件和建立自定義的方言。

  3. Thymeleaf 提供spring標準方言和一個與 SpringMVC 完美整合的可選模組,可以快速的實現表單繫結、屬性編輯器、國際化等功能。

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

7. 整合Shiro-thymeleaf的依賴

 <dependency>
            <groupId>com.github.theborakompanioni</groupId>
            <artifactId>thymeleaf-extras-shiro</artifactId>
            <version>2.0.0</version>
        </dependency>

8. 整合devtools的依賴

<dependency>

			<groupId>org.springframework.boot</groupId>

			<artifactId>spring-boot-devtools</artifactId>

			<optional>true</optional>

		</dependency>

(二)Springboot專案需要的配置檔案Application.yml(Application.properties)

spring:
  # 資料來源的配置
  datasource:
    username: root
    password: 
    
    # 常規連線資料庫
    url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver
	 
	 #	使用 druid 資料庫連線池的方法
	 #?serverTimezone=UTC解決時區的報錯
    url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

    #Spring Boot 預設是不注入這些屬性值的,需要自己繫結
    #druid 資料來源專有配置
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true 


  # 模板引擎的相關配置
  thymeleaf:
    cache: false
    suffix: .html
    prefix: classpath:/templates/
    mode: HTML
    encoding: utf-8
    servlet:
      content-type: text/html
  
  # 靜態資源的路徑
  mvc:
    static-path-pattern: /resources/**
  resources:
    static-locations: classpath:/resources/
  
  # 檔案的上傳與下載配置
  servlet:
    multipart:
      max-file-size: 50MB
      max-request-size: 50MB

# Tomcat伺服器相關配置
server:
  port: 8080
  servlet:
    context-path: /springboot


# mybatis的相關配置
mybatis:
  configuration:
    cache-enabled: true
  type-aliases-package: top.linruchang.springbootdemo.domain
  mapper-locations: classpath:/mapper/*Mapper.xml
  lazy-initialization: true

(三)Shrio的配置檔案


package com.lianwei.config;

import com.lianwei.entity.User;
import com.lianwei.seivice.UserService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * 自定義的 UserRealm  extends AuthorizingRealm:
 *
 * @Author: ghh
 * @Date: 2020/10/24 14:41
 */
public class UserRealm extends AuthorizingRealm {
    @Autowired
    UserService userService;
    //  授權
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        System.out.println("執行了 => doGetAuthorizationInfo");

        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
        // 拿到當前登入的這個物件
        Subject subject = SecurityUtils.getSubject();
        // 拿到User物件
        User currentUser = (User) subject.getPrincipal();
        // 設定當前使用者的許可權
        System.out.println(currentUser.getName() + "的許可權為 " + currentUser.getPerms());
        info.addStringPermission(currentUser.getPerms());

        return info;
    }

    //  認證
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        System.out.println("執行了===>認證doGetAuthorizationInfo");

        UsernamePasswordToken userToken = (UsernamePasswordToken) authenticationToken;
        //  使用者名稱, 密碼, 從資料庫中讀取
         User user = userService.queryUserByName(userToken.getUsername());

         if (user == null) {
             return null; //    UnknownAccountException
         }

        Subject currentSubject = SecurityUtils.getSubject();
        Session session = currentSubject.getSession();
        session.setAttribute("loginUser",user.getName());


        //  密碼認證,shiro自動認證
        return new SimpleAuthenticationInfo(user, user.getPwd(),"");
    }
}

shiro的授權認證:

package com.lianwei.config;

import com.lianwei.entity.User;
import com.lianwei.seivice.UserService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * 自定義的 UserRealm  extends AuthorizingRealm:
 *
 * @Author: ghh
 * @Date: 2020/10/24 14:41
 */
public class UserRealm extends AuthorizingRealm {
    @Autowired
    UserService userService;
    //  授權
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        System.out.println("執行了 => doGetAuthorizationInfo");

        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
        // 拿到當前登入的這個物件
        Subject subject = SecurityUtils.getSubject();
        // 拿到User物件
        User currentUser = (User) subject.getPrincipal();
        // 設定當前使用者的許可權
        System.out.println(currentUser.getName() + "的許可權為 " + currentUser.getPerms());
        info.addStringPermission(currentUser.getPerms());

        return info;
    }

    //  認證
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        System.out.println("執行了===>認證doGetAuthorizationInfo");

        UsernamePasswordToken userToken = (UsernamePasswordToken) authenticationToken;
        //  使用者名稱, 密碼, 從資料庫中讀取
         User user = userService.queryUserByName(userToken.getUsername());

         if (user == null) {
             return null; //    UnknownAccountException
         }

        Subject currentSubject = SecurityUtils.getSubject();
        Session session = currentSubject.getSession();
        session.setAttribute("loginUser",user.getName());


        //  密碼認證,shiro自動認證
        return new SimpleAuthenticationInfo(user, user.getPwd(),"");
    }
}

相關文章