Spring RequestMapping antmatcher忽略URL

时间:2019-01-26 01:11:27

标签: java angularjs spring-boot angular-ui-router saml-2.0

我有一个相当简单的RequestMapping,它可以转发来自ui-router的url:

@RequestMapping(value = "/**/{path:[^\\.]*}")
    public String redirect(@PathVariable("path") String path) {
        // Forward to home page so that route is preserved.
        return "forward:/";
    }

这是为了使所有内容都能与我的SAML IDP一起玩。但是,我还有一个正在创建的Websocket,我不想不想通过这里。 websocket网址的格式为:

/ws/**

我一直在尝试使用正则表达式来忽略其中包含“ ws”的网址,但是我运气不佳。我离得很近,但是我尝试过的任何东西都无法使我得到想要的东西。有什么办法可以将我的antmatcher中的第一个/ **与正则表达式结合使用,以忽略我想要的东西吗?我可以写正则表达式没问题,只是不确定如何将其合并到antmatcher中。

tldr:我需要一个匹配的antmatcher:

/ bbs / index /邮箱 等等...

但不是:

/ ws / info

2 个答案:

答案 0 :(得分:0)

您可以尝试将antMatchers保留为默认设置,并尝试使用两种不同的RequestMappings,其中一种用于/**,另一种用于/ws/**

对于WS请求,请使用类似以下内容的

@RequestMapping(value = "/ws/**/{path:[^\\.]*}")
    public String wsHandling(@PathVariable("path") String path) {
        // Do some other stuff
        return null;
    }

对于其余请求,请使用类似以下内容的

@RequestMapping(value = "/**/{path:[^\\.]*}")
    public String redirect(@PathVariable("path") String path) {
        // Forward to home page so that route is preserved.
        return "forward:/";
    }

答案 1 :(得分:0)

我想出了一个简单的解决方案。我没有尝试重新制作antmatcher,而是将所有ui路由器状态URL都添加了“ zfgcui”前缀。我的antmatcher现在看起来像:

/zfgcui/**/{path:[^\\.]*}

现在这将忽略ws端点,并继续仅转发ui-router端点。实施起来要简单得多,也省去很多麻烦