目前我有一个工作系统,需要进行一些小的更改。我想更改当用户未登录进行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。