PAC4J 新手入门,之一(概述及准备)

什么是 pac4j

pac4j 是一个简单而强大的安全框架,用于 Java 验证用户、获取用户配置文件和管理授权,以保护 web 应用程序和 web服务。

它提供了一套全面的概念和组件。它适用于大多数框架/工具,并支持大多数认证和授权机制。它的开源授权协议为 Apache 2。

在 Java Web 项目开发中,涉及到用户认证时,我们可以选用 pac4j 框架进行对接,以减少开发工作量。而由于 pac4j 本身支持了很多认证协议,如 OAuth2.0、OIDC、CAS、SAML2等,所以我们更倾向于,当我们的项目需要作为认证协议客户端,对接相应协议时使用 pac4j 框架,以减少对接工作量。

pac4j 资料

pac4j 官方网站:网站

pac4j 中文文档地址:中文

pac4j 英文文档地址:英文

pac4j GitHub 地址:GitHub

pac4j 邮件列表:邮件列表

知识准备

阅读此 pac4j 新手指南,需要读者具有以下相关知识:

  1. 基本的 Java 语言知识(包括 Java 8 中引入的 Lambda)
  2. 会 Spring Boot 项目,并具有基本的 Spring Boot 项目知识
  3. 常用 IDE 软件的使用经验,如 IntelliJ IDEA
  4. Maven 基础知识(熟悉 Gradle 也可)

pac4j 的版本

pac4j 目前分为三个主线版本,分别为:4.X5.X6.X,分别对应的 JDK 版本为:JDK 8JDK 11JDK 17

使用时我们需要按照自己项目依赖的 JDK 版本进行选择。

相关软件、框架

指南将使用 Spring BootSpring Security 演示 pac4j 的使用,相关工具、软件、框架的版本如下表:

软件/框架 版本号
JDK 17.0.5
IntelliJ IDEA 社区版 2022.3.1
Maven IntelliJ IDEA 内嵌
Spring Boot 2.7.7
Spring Security 2.7.7
pac4j 5.7.0

指南虽然使用 JDK 17,但选择 Spring Boot 版本为 2.7.7,pac4j 版本为 5.7.0。如果使用其他版本,需要注意相关的配套关系。

使用的框架版本中,如果存在 Lombok 依赖,还需要 IntelliJ IDEA 需要安装 Lombok 插件。

指南使用的是 IntelliJ IDEA 的社区版,不支持 Spring Boot 相关的开发特性,我们需要安装插件 Spring Boot Assitant 方便开发。如果你使用的是 IntelliJ IDEA 专业版,则无需安装此插件。

初始化项目

我们在 IntelliJ IDEA 中新建一个 Maven 项目,并修改 pom.xml 以适配 Spring Boot,构建一个使用 Spring BootSpring Security 的基础项目。

  1. pom.xml
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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.7</version>
        <relativePath/>
    </parent>

    <groupId>tech.bookhub</groupId>
    <artifactId>pac4j-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <name>pac4j-demo</name>
    <description>pac4j demo project for Spring Boot.</description>

    <properties>
        <java.version>17</java.version>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</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>
  1. application.yml
yaml 复制代码
server:
  port: 8888

spring:
  security:
    user:
      name: admin
      password: bookhub

以上 application.yml 文件意图为:指定 tomcat 以端口 8888 运行,并配置一个用户 admin,密码为 bookhub

  1. Pac4jApplication.java
java 复制代码
package tech.bookhub;

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

@SpringBootApplication
public class Pac4jApplication {
    public static void main(String[] args) {
        SpringApplication.run(Pac4jApplication.class, args);
    }
}
  1. IndexController.java
java 复制代码
package tech.bookhub.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class IndexController {

    @GetMapping("/")
    public String index() {
        return "index ok";
    }
}

项目结构如下图:

然后我们运行项目后,可以通过浏览器访问 http://localhost:8888/,首次访问将会跳转到 Spring Security 的默认认证界面,我们输入用户名 admin,密码 bookhub,如下图:

认证成功后,我们即可获得路径 / 的响应 index ok,如下图:

以上 Demo 代码见 GitHub,Demo 0

相关推荐
yuanbenshidiaos7 分钟前
C++----------函数的调用机制
java·c++·算法
是小崔啊25 分钟前
开源轮子 - EasyExcel01(核心api)
java·开发语言·开源·excel·阿里巴巴
黄公子学安全34 分钟前
Java的基础概念(一)
java·开发语言·python
liwulin050635 分钟前
【JAVA】Tesseract-OCR截图屏幕指定区域识别0.4.2
java·开发语言·ocr
jackiendsc39 分钟前
Java的垃圾回收机制介绍、工作原理、算法及分析调优
java·开发语言·算法
Yuan_o_40 分钟前
Linux 基本使用和程序部署
java·linux·运维·服务器·数据库·后端
Oneforlove_twoforjob43 分钟前
【Java基础面试题027】Java的StringBuilder是怎么实现的?
java·开发语言
程序员一诺1 小时前
【Python使用】嘿马python高级进阶全体系教程第10篇:静态Web服务器-返回固定页面数据,1. 开发自己的静态Web服务器【附代码文档】
后端·python
数据小小爬虫1 小时前
利用Java爬虫获取苏宁易购商品详情
java·开发语言·爬虫
小汤猿人类1 小时前
nacos-服务发现注册
java·开发语言·服务发现