konglizhi3362
V2EX  ›  Java

不想写代码,但想要集成一个登录页面? Sa-Token-Quick-Login 帮你实现!

  •  
  •   konglizhi3362 · 1 day ago · 1563 views

    一、解决什么问题

    Sa-Token-Quick-Login 可以为一个系统快速的、零代码 注入一个登录页面。

    试想一下,假如我们开发了一个非常简单的小系统,比如说:服务器性能监控页面, 我们将它部署在服务器上,通过访问这个页面,我们可以随时了解服务器性能信息,非常方便。

    然而,这个页面方便我们的同时,也方便了一些不法的攻击者,由于这个页面毫无防护的暴露在公网中,任何一台安装了浏览器的电脑都可以随时访问它!

    为此,我们必须给这个系统加上一个登录认证,只有知晓了后台密码的人员才可以进行访问。

    细细想来,完成这个功能你需要:

    1. 编写前端登录页面,手写各种表单样式
    2. 寻找合适的 ajax 类库,jQueryAxios?还是直接前后台不分离?
    3. 寻找合适的模板引擎,比如jspThymeleafFreeMarkerVelocity……选哪个呢?
    4. 处理后台各种拦截认证逻辑,前后台接口对接
    5. 你可能还会遇到令人头痛欲裂的模板引擎中ContextPath处理
    6. ……

    你马上就会发现,写个监控页你一下午就可以搞定,然而这个登录页你却可能需要花上两三天的时间,这是一笔及其不划算的时间浪费

    那么现在你可能就会有个疑问,难道就没有什么方法给我的小项目快速增加一个登录功能吗?

    Sa-Token-Quick-Login 便是为了解决这个问题!

    Sa-Token 是一个开源、免费、一站式 java 权限认证框架。可解决:登录认证、权限认证、微服务网关鉴权、SSO 单点登录、OAuth2 统一认证、jwt 集成、API 参数签名、API Key 授权 等一系列权限相关问题。

    二、适用场景

    Sa-Token-Quick-Login 旨在用最小的成本为项目增加一个登录认证功能

    • 简单:只需要引入一个依赖便可为系统注入登录功能,快速、简单、零代码!
    • 不可定制:由于登录页面不可定制,所以 Sa-Token-Quick-Login 非常不适合普通项目的登录认证模块,STQL 也无意去解决所有项目的登录认证模块

    Sa-Token-Quick-Login 的定位是这样的场景:你的项目需要一个登录认证功能、这个认证页面可以不华丽、可以烂,但是一定要有,同时你又不想花费太多的时间浪费在登录页面上, 那么你便可以尝试一下Sa-Token-Quick-Login

    三、集成步骤

    首先我们需要创建一个 SpringBoot 的 demo 项目,比如:sa-token-demo-quick-login

    1 、添加 pom 依赖

    <!-- Sa-Token 权限认证, 在线文档: https://sa-token.com -->
    <dependency>
        <groupId>cn.dev33</groupId>
        <artifactId>sa-token-spring-boot-starter</artifactId>
        <version>1.46.0</version>
    </dependency>
    
    <!-- Sa-Token-Quick-Login 插件依赖 -->
    <dependency>
        <groupId>cn.dev33</groupId>
        <artifactId>sa-token-quick-login</artifactId>
        <version>1.46.0</version>
    </dependency>
    

    Gradle 方式:

    // Sa-Token 权限认证,在线文档: https://sa-token.com
    implementation 'cn.dev33:sa-token-spring-boot-starter:1.46.0'
    
    // Sa-Token-Quick-Login 插件
    implementation 'cn.dev33:sa-token-quick-login:1.46.0'
    

    注:SpringBoot 3.x 请改用 sa-token-spring-boot3-starter,SpringBoot 4.x 请改用 sa-token-spring-boot4-startersa-token-quick-login 插件本身不用换。

    2 、启动类

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

    启动成功后,可以用 CommandLineRunner 把默认账号密码打印到控制台,方便测试:

    @Component
    public class SaQuickStartup implements CommandLineRunner {
    
    	@Value("${server.port:8080}")
    	private String port;
    
    	@Override
    	public void run(String... args) {
    		System.out.println("\n------ 启动成功 ------");
    		System.out.println("home: http://localhost:" + port);
    		System.out.println("name: " + SaQuickManager.getConfig().getName());
    		System.out.println("pwd:  " + SaQuickManager.getConfig().getPwd());
    	}
    }
    

    3 、新建测试 Controller

    /**
     * 测试专用 Controller 
     */
    @RestController
    public class TestController {
    	// 浏览器访问测试: http://localhost:8081
    	@RequestMapping("/")
    	public String index() {
    		String str = "<br />"
    				+ "<h1 style='text-align: center;'>资源页 (登录后才可进入本页面) </h1>"
    				+ "<hr/>"
    				+ "<p style='text-align: center;'> Sa-Token " + SaTokenConsts.VERSION_NO + " </p>";
    		return str;
    	}
    }
    

    注:示例源码在官方仓库 /sa-token-demo/sa-token-demo-quick-login 目录下,SpringBoot 3 示例在 /sa-token-demo/sa-token-demo-quick-login-sb3,可结合源码查看学习。Sa-Token 集成示例大全下载

    四、测试访问

    启动项目,使用浏览器访问:http://localhost:8081,首次访问时,由于处于未登录状态,会被强制进入登录页面

    登录

    使用默认账号:sa / 123456进行登录,会看到资源页面

    登录

    也可以通过 Http Basic 的方式直接进行认证(一般需要在专门的 API 测试工具下才能正常测试,浏览器会自动忽略 @ 之前的信息):

    http://sa:123456@localhost:8081/
    

    五、可配置信息

    你可以在 yml 中添加如下配置 (所有配置都是可选的)

    # Sa-Token-Quick-Login 配置
    sa:
        # 登录账号
        name: sa
        # 登录密码
        pwd: 123456
        # 是否自动随机生成账号密码 (此项为 true 时, name 与 pwd 失效)
        auto: false
        # 是否开启全局认证(关闭后将不再强行拦截)
        auth: true
        # 登录页标题
        title: Sa-Token 登录
        # 是否显示底部版权信息
        copr: true
        # 指定拦截路径
        # include: /**
        # 指定排除路径
        # exclude: /1.jpg
        # 将本地磁盘的某个路径作为静态资源开放
        # dir: file:E:\static
    

    六、使用独立 jar 包运行

    使用sa-token-quick-login只需引入一个依赖即可为系统注入登录模块,现在我们更进一步,将这个项目打成一个独立的 jar 包。

    通过这个 jar 包,我们可以方便的部署任意静态网站!做到真正的零编码注入登录功能。

    打包步骤

    首先放上懒人链接:sa-quick-dist.jar,不想手动操作的同学可以直接在开源仓库下载打包后的 jar 文件

    sa-token-demo 是独立的示例工程,sa-token-demo-quick-login 已包含在其中,直接进入该模块打包即可。

    1 、进入示例模块目录

    cd sa-token-demo/sa-token-demo-quick-login
    

    2 、执行打包命令

    mvn clean package
    

    3 、进入 target 文件夹,找到打包好的 jar 文件

    sa-token-demo-quick-login-0.0.1-SNAPSHOT.jar
    

    4 、我们将其重命名为sa-quick-dist.jar,现在这个 jar 包就是我们的最终程序,我们在这个target目录直接进入 cmd ,执行如下命令启动 jar 包

    java -jar sa-quick-dist.jar
    

    5 、测试访问,根据控制台输出提示,我们使用浏览器访问测试: http://localhost:8080

    sa-quick-start

    如果可以进入登录界面,则代表打包运行成功
    当然仅仅运行成功还不够,下面我们演示一下如何使用这个 jar 包进行静态网站部署

    七、所有功能示例

    Case 1. 指定静态资源路径

    java -jar sa-quick-dist.jar --sa.dir file:E:\www
    

    使用 dir 参数指定E:\www目录作为资源目录进行部署 (现在我们可以通过浏览器访问E:\www目录下的文件了!)

    Case 2. 指定登录名与密码

    java -jar sa-quick-dist.jar --sa.name=zhang --sa.pwd=zhang123
    

    现在,默认的账号sa/123456将被废弃,而是使用zhang/zhang123进行账号校验

    Case 3. 指定其自动生成账号密码

    java -jar sa-quick-dist.jar --sa.auto=true
    

    每次启动时随机生成账号密码(会在启动成功时打印到控制台上)

    Case 4. 指定登录页的标题

    java -jar sa-quick-dist.jar --sa.title="XXX 系统登录"
    

    Case 5. 关闭账号校验,仅作为静态资源部署使用

    java -jar sa-quick-dist.jar --sa.auth=false
    

    Case 6. 指定启动端口(默认 8080 )

    java -jar sa-quick-dist.jar --server.port=80 
    

    注:所有参数可组合使用

    八、使用 SpringBoot 默认资源路径

    SpringBoot 默认开放了一些路径作为资源目录,比如classpath:/static/, 怎么使用呢?我们只需要在 jar 包同目录创建一个\static文件夹,将静态资源文件复制到此目录下,然后启动 jar 包即可访问

    同时,我们还可以在 jar 包同目录创建 yml 配置文件,来覆盖 jar 包内的 yml 配置,如下图所示:

    sa-quick-case.png

    例如如上目录中/static中有一个1.jpg文件,我们启动 jar 包后访问http://localhost:8080/1.jpg即可查看到此文件,这是 Springboot 自带的功能,在此不再赘述


    参考资料

    9 replies    2026-08-28 10:34:31 +08:00
    evill
        1
    evill  
       1 day ago
    我理解这种需求,直接 LB 上加一个 forward auth 不就 OK 了

    authilia + traefik
    evill
        2
    evill  
       1 day ago
    authelia
    python35
        3
    python35  
       1 day ago
    caddy 加一个 basic auth 就行,https 和认证都搞定了
    Chengyunlai
        4
    Chengyunlai  
       1 day ago
    ngx_http_auth_basic_module
    MindMindMax
        5
    MindMindMax  
       1 day ago
    AI 时代这种轮子已经失去意义了。
    webcape233
        6
    webcape233  
       1 day ago
    darkhttpd 加上 user 和 password
    alexluo1
        7
    alexluo1  
    PRO
       18h 53m ago
    已经不用 Java 了
    yangwa
        8
    yangwa  
       9h 14m ago
    能不能做到不依赖框架,任意的 web 服务都可以,你这个还是需要使用 spring boot 编译一个 web 服务,java 应用跑几个静态资源还是比较麻烦
    JackieSung
        9
    JackieSung  
       8h 19m ago
    我用的是 go 语言做的 https://github.com/zitadel/zitadel
    也很方便
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2908 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 10:54 · PVG 18:54 · LAX 03:54 · JFK 06:54
    ♥ Do have faith in what you're doing.