SPNEGO - исключить конкретный шаблон URL / URL из проверки подлинности - PullRequest
0 голосов
/ 11 сентября 2018

Я внедрил единый вход в свое приложение. Теперь у меня есть URL, которые я не хочу использовать при едином входе (например, незащищенный веб-сервис). Как я могу это сделать? Существует ли параметр инициализации SPNEGO, который поддерживается?

<display-name>myapp</display-name>
<welcome-file-list>
    <welcome-file>/faces/index.xhtml</welcome-file>
</welcome-file-list>
<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/faces/error.xhtml</location>
</error-page>
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>prototype</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

Теперь я хотел бы настроить что-то вроде этого:

<filter>
    <filter-name>SpnegoHttpFilter</filter-name>
    <filter-class>net.sourceforge.spnego.SpnegoHttpFilter</filter-class>
[...]
  <init-param>
   <param-name>excludePattern</param-name>
   <param-value>.*rest.*</param-value>
  </init-param>
</filter>

Отредактировано: 11.09.2008 13:35

В источниках SPNEGO в классе SpnegoHttpFilter.java я нашел то, что искал (включая комментарий):

   @Override
public void doFilter(final ServletRequest request, final ServletResponse response
    , final FilterChain chain) throws IOException, ServletException {

    final HttpServletRequest httpRequest = (HttpServletRequest) request;
    final SpnegoHttpServletResponse spnegoResponse = new SpnegoHttpServletResponse(
            (HttpServletResponse) response);

    // skip authentication if resource is in the list of directories to exclude
    if (exclude(httpRequest.getContextPath(), httpRequest.getServletPath())) {
        chain.doFilter(request, response);
        return;
    }

Но теперь мой вопрос: как эта функция получает список каталогов для пропуска аутентификации?

1 Ответ

0 голосов
/ 12 сентября 2018

Проведя некоторое время, в том числе просматривая форумы docussion на sourceforge, я не смог запустить механизм пропуска-аутентификации SPNEGO.Кажется, нет примера конфигурации.Я открыл вопрос SPNEGO на странице sourceforce, но сейчас я применил обходной путь.

Я взял последнюю сборку spnego.(build r9, скачано здесь ).

В классе SpnegoHttpFilter Я создал глобальную переменную под названием "excludePattern".

private String excludePattern = null;

В моем web.xml моего веб-приложения я создал новый параметр init следующим образом:

<init-param> 
 <param-name>excludePattern</param-name> 
 <param-value>.*rest.*</param-value>
</init-param> 

В классе SpnegoHttpFilter Мне нужно прочитатьпараметр web.xml выглядит следующим образом:

this.excludePattern = filterConfig.getInitParameter("excludePattern");

Afterwords, в классе SpnegoHttpFilter Я иду в функцию doFilter () и вставляю следующее:

String url = httpRequest.getRequestURL().toString();
if (Pattern.matches(this.excludePattern, url)) {
   chain.doFilter(request, response);
   LOGGER.fine("Excluded URL requested");
   return;
}

Теперь код проверяет данный шаблон по запрошенному URL.Если шаблон является частью URL, аутентификация будет пропущена.

Надеюсь, скоро сделаю оригинальное решение, созданное spnego developpers.Пока я не использую этот обходной путь.

...