2015-06-24 2 views
1

В настоящее время у меня есть рабочая система, где мне нужны незначительные изменения. Я хочу изменить заголовки, возвращенные, когда пользователь не выполнил вызов для отдыха. В настоящее время он всегда возвращает заголовок WWW-Authenticate: Basic, который автоматически открывает вход в браузер.Make Jetty Container AUTH возвращает разные заголовки

Я хочу изменить это во что-то другое, что не срабатывает (так что нет основного/дайджест). Это, однако, невозможно достичь с помощью приманки-maven-plugin, поскольку фильтры 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 перезапись вместо добавления вещи только в заголовке?

+0

Чтобы добавить к этому вопросу. Мы используем JAASLoginService с LoginModule. Существует BasicAuthenticator, который мгновенно возвращает заголовок с этим WWW-Authenticate: basic ..., Мы хотим перезаписать это. Но писать пользовательский класс, который всегда будет приводить к исключению класса. Для этого мы хотим, чтобы этот HeaderPatternRule перезаписывал это в заголовок non-basic/digest – Fraek

ответ

0

Аутентификация происходит до все сервлеты и фильтры вашего webapp.

Вам необходимо либо не использовать сервлетовую безопасность и аутентификацию (делать все в своем собственном веб-приложении), либо написать пользовательскую реализацию аутентификации для поддержки вашего варианта использования.

+0

Исправить и добавить к этому: фильтр, похоже, работает, однако BasicAuthenticator снова перезаписывает WWW-аутентификацию. – Fraek

0

Чтобы заменить BasicAuthenticator, вам необходимо создать собственный аутентификатор. Вы можете создать свой код на BasicAuthenticator, а затем изменить заголовки, с которыми вы хотите работать.

Альтернативно не используйте аутентификацию контейнера и фильтр записи, который реализует механизм аутентификации и использует метод входа по запросу.

+0

Не могли бы вы привести пример реализации через XML и пользовательский класс аутентификации? Я мог бы заставить его работать; получение классаNotFoundExceptions. – Fraek

Смежные вопросы