我在我的应用程序中实现了单点登录。现在,我获得了不想单点登录使用的URL(例如不受保护的Web服务)。我该怎么做?是否有受支持的SPNEGO初始化参数?
int find()
{
int n=5;
return n;
}
现在,我要配置如下内容:
<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>
编辑时间:2018年9月11日下午01:35
在SPNEGO源代码中,在SpnegoHttpFilter.java类中,我找到了想要的内容(包括注释):
<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>
但是现在我的问题是,该函数如何检索目录列表以跳过身份验证?
答案 0 :(得分:0)
研究了一段时间后,包括浏览Sourceforge上的文档讨论论坛,我无法使SPNEGO跳过身份验证机制运行。似乎没有示例配置。我打开了一个SPNEGO sourceforce页面的问题,但现在我实现了一种解决方法。
我拿走了spnego的最后一个版本。 (版本r9,已下载here)。
在类 SpnegoHttpFilter 中,我创建了一个全局变量,称为“ excludePattern”。
private String excludePattern = null;
在Web应用程序的web.xml中,我创建了一个新的初始化参数,如下所示:
<init-param>
<param-name>excludePattern</param-name>
<param-value>.*rest.*</param-value>
</init-param>
在类 SpnegoHttpFilter 中,我需要像这样读取web.xml的参数:
this.excludePattern = filterConfig.getInitParameter("excludePattern");
后记,在类 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开发人员制作的原始解决方案能尽快工作。只要我不这样做,我就会采用这种解决方法。