首页 > 其他分享 >PAC4J 新手入门,之一(概述及准备)

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

时间:2023-12-05 09:00:56浏览次数:34  
标签:PAC4J Spring boot springframework 新手入门 pac4j 概述 Boot org

什么是 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.X 和 6.X,分别对应的 JDK 版本为:JDK 8JDK 11 和 JDK 17

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

相关软件、框架

指南将使用 Spring Boot 和 Spring 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 Boot 和 Spring Security 的基础项目。

  1. 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>
    <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
server:
  port: 8888

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

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

  1. Pac4jApplication.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
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

标签:PAC4J,Spring,boot,springframework,新手入门,pac4j,概述,Boot,org
From: https://www.cnblogs.com/dev2007/p/17876459.html

相关文章

  • 密码学概述
    密码学密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学,总称密码学。电报最早是由美国的摩尔斯在1844年发明的,故也被叫做摩尔斯电码。它由两种基本信号和不同的间隔时间组成......
  • Restart Study MySQL-01数据库概述(基础)
    C(Chapter)C-01.数据库概述1.为什么要用数据库持久化(persistence):把数据保存到可掉电式存储设备(硬盘)中以供之后使用。大多数情况下,特别是企业应用,数据持久化是将内存中的数据保存到硬盘上加以"固化",而持久化的实现过程大多使用各种关系数据库来完成。持久化的主要作用是将......
  • C语言概述
    1.为什么要学习C语言1>.C语言的起源和发展程序设计语言的发展:机器语言(低级语言)——汇编语言(中级语言)——高级语言低级语言:使用的是一串二进制代码中级语言:使用助记符(英文单词)来代替一串二进制代码(容易记忆,不容易出错)高级语言:......
  • SAP ABAP 各种增强技术(Enhancement)概述 - 所谓第一代,第二代,第三代增强技术的出处试
    本文回答笔者这篇教程:如何通过增强(Enhancement)的方式给SAPABAP标准程序增添新功能评论区的读者留言:这个和第一二三四代以及badi增强有什么联系呢?笔者从2007年一月就在SAP中国使用ABAP进行SAP产品开发了,说实话SAP内部不会把ABAP各种增强技术简单得冠之以第一......
  • 人工智能概述
    人工智能的定义人工智能是指通过计算机模拟人类智能,以达到类似人类智能的表现和行为的技术和理论。通俗地说,人工智能就是让计算机具有像人类一样的思考、判断、决策、学习、交流等能力。人工智能的研究范围极广,包括机器学习、深度学习、自然语言处理、计算机视觉、机器人技术等多个......
  • 数据库概述
    数据库概述SQL特点1.具有综合统一性(不同的数据库支持的SQL稍有不同、但都支持标准sql)2.语言简洁,用户易接受3.非过程化语言(无需关注内部原理细节)4.可与其他语言结合(JAVA、Python等)语法特点1.大小写不敏感2.可以以单行或多行书写,只以分号结尾3.注释:单行注释--[空格]、#s......
  • 【scikit-learn基础】--概述
    Scikit-learn是一个基于Python的开源机器学习库,它提供了大量的机器学习算法和工具,方便用户进行数据挖掘、分析和预测。Scikit-learn是基于另外两个知名的库Scipy和Numpy的,关于Scipy和Numpy等库,之前的系列文章中有介绍:Scipy基础系列Numpy基础系列1.概要自从AlphaG......
  • 01-计算机网络概述
    01-计算机网络概述1.2因特网的概述1网络、互联网(互连网)和因特网网络(Network)由若干节点(Node)和连接这些节点的链路(Link)组成多个网络还可以通过路由器互连起来,这样就构成了一个覆盖范围更大的网络,即互联网(互连网)因特网(Internet)是世界上最大的互连网络(用户数以亿计,互连的网络数......
  • 基于RK3568高性价比全国产EMS储能解决方案(一)概述
    储能产业链框架储能产业链可分为上游“原材料及生产设备”、中游“储能系统”、下游“储能场景应用及后市场服务”。图1储能产业链框架图产业链中游的“储能电池系统”主要包括“能量管理系统(EMS)”、“电池管理系统(BMS)”、“储能逆变器(PCS)”、“电池组”四个部分。电池组将......
  • 电脑CentOS 7.6与Windows系统对比:使用方式、优缺点概述
    在多操作系统环境中,CentOS7.6和Windows系统各自独占鳌头,它们在功能、稳定性、兼容性以及安全性等方面都有着各自的优点。这篇文章将对比分析这两个操作系统,以便用户能更好地了解它们的特点和使用方式。一、使用方式1. CentOS7.6CentOS7.6是一种成熟的Linux发行版,它的使用方式主......