【问题标题】:Override concrete member function of an abstract class in Java覆盖Java中抽象类的具体成员函数
【发布时间】:2022-10-15 02:41:17
【问题描述】:

有什么方法可以覆盖我的 Spring Boot 应用程序中的 isPreFlightRequest 吗?根据文档,我们不能覆盖静态方法,所以我想知道是否有其他方法可以重写它,以便编译器不会到达这里。

public abstract class CorsUtils {

    /**
     * Returns {@code true} if the request is a valid CORS one by checking {@code Origin}
     * header presence and ensuring that origins are different via {@link #isSameOrigin}.
     */
    @SuppressWarnings("deprecation")
    public static boolean isCorsRequest(ServerHttpRequest request) {
        return request.getHeaders().containsKey(HttpHeaders.ORIGIN) && !isSameOrigin(request);
    }

    /**
     * Returns {@code true} if the request is a valid CORS pre-flight one by checking {code OPTIONS} method with
     * {@code Origin} and {@code Access-Control-Request-Method} headers presence.
     */
    public static boolean isPreFlightRequest(ServerHttpRequest request) {
        HttpHeaders headers = request.getHeaders();
        return (request.getMethod() == HttpMethod.OPTIONS
                && headers.containsKey(HttpHeaders.ORIGIN)
                && headers.containsKey(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD));
    }

【问题讨论】:

  • 你可以在实现中“隐藏”它,但是你需要确保你正确地声明了你的实例。
  • 你想让我做什么 ?设置 CORS 或使用 mock 进行一些测试?使用 PowerMock,您可以进行测试。 CORS 可以并且必须使用 Spring Security 配置进行配置,即
  • 我希望用 return false 对其进行硬编码
  • 它是春季版本升级@VictorGubin的一个错误,我只想以某种方式从这个新函数返回false。上个版本没有这个功能
  • 允许一切?在这种情况下,唯一的方法是使用 ASM/CGLIB 在类加载器级别替换类。严格不推荐,CORS 保护确实很重要,这首先是安全劫持预防。如果有的话,您将无法通过安全扫描。

标签: java spring-boot abstract-class


【解决方案1】:

看起来这个问题在这里得到了回答

Is it possible to override a static method in derived class?

由于您将创建 CorsUtils 的派生类,因此您将使用方法隐藏来阻止原始静态方法运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 2011-01-08
    • 2016-01-26
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    相关资源
    最近更新 更多