You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Play Framework中限制不安全的HTTP请求与连接?

嘿,刚好我对Play Framework的安全配置熟得很,来给你讲讲怎么实现类似Spring Boot里http.requiresChannel().antMatchers("/text").requiresSecure()的功能,也就是限制不安全的HTTP请求、强制走HTTPS的几种方式:

1. 路由层面精准控制单个/少数路径

如果你只需要给特定的几个接口强制HTTPS,直接在routes文件里给对应路由加上secure约束就可以了,非常直观:

GET     /text    controllers.HomeController.text()    secure

这样当用户用HTTP访问/text时,Play会自动返回301重定向到对应的HTTPS地址,和Spring里针对指定路径配置requiresSecure的效果一致。

2. 自定义全局过滤器批量控制路径

如果需要给一批路径(比如所有/api/**或者多个分散的路径)强制HTTPS,写一个自定义Filter会更灵活,完全可以实现类似Spring中antMatchers的匹配逻辑:

首先创建过滤器类:

import play.mvc.*;
import play.mvc.Http.*;
import java.util.concurrent.CompletionStage;
import java.util.function.Function;
import java.util.concurrent.CompletableFuture;

public class HttpsEnforcementFilter extends Filter {

    public HttpsEnforcementFilter(Materializer mat) {
        super(mat);
    }

    @Override
    public CompletionStage<Result> apply(Function<RequestHeader, CompletionStage<Result>> nextFilter, RequestHeader requestHeader) {
        // 这里可以自定义路径匹配逻辑,比如只针对/text开头的路径生效
        String path = requestHeader.path();
        if (!requestHeader.secure() && path.startsWith("/text")) {
            // 构造HTTPS地址并重定向
            String httpsUrl = "https://" + requestHeader.host() + path;
            return CompletableFuture.completedFuture(Results.movedPermanently(httpsUrl));
        }
        // 符合条件的请求继续往下走
        return nextFilter.apply(requestHeader);
    }
}

然后在application.conf里注册这个过滤器,让它生效:

play.filters.enabled += "your.package.path.HttpsEnforcementFilter"

这种方式可以灵活扩展匹配规则,比如用正则匹配路径、判断请求方法等等,完全能覆盖Spring里的灵活配置场景。

3. 全局强制所有请求走HTTPS

如果你的整个应用都不允许HTTP访问,直接在application.conf里加一行配置就能搞定全局重定向:

play.http.secure=true

这样任何HTTP请求都会被自动重定向到HTTPS,相当于Spring里给所有路径设置requiresSecure的效果。

根据你的需求选对应的方式就好,前两种可以精准控制范围,第三种适合全应用强制HTTPS的场景~

内容的提问来源于stack exchange,提问作者SandeepSharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 13:27:27