使Jetty Container AUTH返回不同的标头



目前我有一个工作系统,需要进行一些小的更改。我想更改当用户未登录进行rest调用时返回的标头。目前,它总是返回一个WWW-Authenticate:Basic头,自动弹出浏览器登录。

我想把这个改成其他不激发这个的东西(所以没有基本/摘要)。然而,使用jetty-maven插件似乎不可能实现这一点,因为web.xml过滤器确实可以工作,但在有人进入程序后就会启动。我想让过滤器自己在码头里工作。

目前,我找到了RewriteHeaders并正在工作,但它们只是添加,而不是重写标头。

<Set name="handler">
    <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
        <Set name="handlers">
            <Array type="org.eclipse.jetty.server.Handler">
                <Item>
                    <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
                </Item>
                <Item>
                    <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
                </Item>
            </Array>
        </Set>
    </New>
</Set>
<Get id="oldhandler" name="handler"/>
<Set name="handler">
    <New id="Rewrite" class="org.eclipse.jetty.rewrite.handler.RewriteHandler">
        <Set name="handler">
            <Ref id="oldhandler"/>
        </Set>
        <!-- Add Acces-Control-Allow-Origin -->
        <Call name="addRule">
            <Arg>
                <New class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule">
                    <Set name="pattern">*</Set>
                    <Set name="name">Access-Control-Allow-Origin</Set>
                    <Set name="value">http://localhost:1337</Set>
                </New>
            </Arg>
        </Call>
        <!-- Change the WWW-Authenticate into something non digest/basic -->
        <Call name="addRule">
            <Arg>
                <New class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule">
                    <Set name="pattern">*</Set>
                    <Set name="name">WWW-Authenticate</Set>
                    <Set name="value">NotBasic</Set>
                </New>
            </Arg>
        </Call>
    </New>
</Set>

长话短说。。。如何覆盖HeaderPatternRule,而不是只在标头中添加内容?

身份验证发生在所有Web应用程序的servlet和筛选器之前。

您要么不需要使用Servlet安全性和身份验证(在自己的Web应用程序中执行所有操作),要么编写一个自定义身份验证实现来支持您的用例。

您需要编写一个自定义的Authenticator来替换BasicAuthenticator。您可以将代码建立在BasicAuthenticator上,然后更改要使用它进行操作的标头。

或者,不要使用任何容器身份验证,并编写实现身份验证机制并在请求时使用登录方法的Filter。

相关内容

  • 没有找到相关文章

最新更新