SPNEGO - 从身份验证检查中排除特定 URL / URL 模式
SPNEGO - Exclude specific URL / URL pattern from authentication check
我在我的应用程序中实现了单点登录。现在我得到了 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>
编辑时间:2018 年 9 月 11 日 01:35 下午
在 SPNEGO 资源中,在 class 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;
}
但现在我的问题是,这个函数如何检索目录列表以跳过身份验证?
经过一段时间的研究,包括浏览 sourceforge 上的文档论坛,我无法使 SPNEGO 跳过身份验证机制 运行。似乎没有示例配置。我打开了一个问题 SPNEGO sourceforce 页面,但现在我实施了一个解决方法。
我使用了 spnego 的最后一个版本。 (构建 r9,已下载 here)。
在 class SpnegoHttpFilter 中,我创建了一个名为 "excludePattern" 的全局变量。
private String excludePattern = null;
在我的 web.xml 我的网络应用程序中,我创建了一个新的初始化参数如下:
<init-param>
<param-name>excludePattern</param-name>
<param-value>.*rest.*</param-value>
</init-param>
在 class SpnegoHttpFilter 我需要像这样读取 web.xml 的参数:
this.excludePattern = filterConfig.getInitParameter("excludePattern");
之后,在 class 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 开发人员制作的原始解决方案。只要我不这样做,我就会采用这种解决方法。
我在我的应用程序中实现了单点登录。现在我得到了 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>
编辑时间:2018 年 9 月 11 日 01:35 下午
在 SPNEGO 资源中,在 class 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;
}
但现在我的问题是,这个函数如何检索目录列表以跳过身份验证?
经过一段时间的研究,包括浏览 sourceforge 上的文档论坛,我无法使 SPNEGO 跳过身份验证机制 运行。似乎没有示例配置。我打开了一个问题 SPNEGO sourceforce 页面,但现在我实施了一个解决方法。
我使用了 spnego 的最后一个版本。 (构建 r9,已下载 here)。
在 class SpnegoHttpFilter 中,我创建了一个名为 "excludePattern" 的全局变量。
private String excludePattern = null;
在我的 web.xml 我的网络应用程序中,我创建了一个新的初始化参数如下:
<init-param>
<param-name>excludePattern</param-name>
<param-value>.*rest.*</param-value>
</init-param>
在 class SpnegoHttpFilter 我需要像这样读取 web.xml 的参数:
this.excludePattern = filterConfig.getInitParameter("excludePattern");
之后,在 class 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 开发人员制作的原始解决方案。只要我不这样做,我就会采用这种解决方法。