Springboot项目中需整合的依赖集和文件配置

(一)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(),"");
    }
}
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页