Spring social ConnectController/connect/facebook出现404错误

Spring social ConnectController/connect/facebook出现404错误,facebook,spring,spring-mvc,spring-social,Facebook,Spring,Spring Mvc,Spring Social,我正在尝试让facebook登录与spring social一起工作。 我在facebook上创建了一个应用程序。 调度程序Servlet <servlet-mapping> <servlet-name>ABC</servlet-name> <url-pattern>*.cs</url-pattern> </servlet-mapping> 基础知识 *.cs 配置了xmls <se

我正在尝试让facebook登录与spring social一起工作。 我在facebook上创建了一个应用程序。

调度程序Servlet

   <servlet-mapping>
    <servlet-name>ABC</servlet-name>
    <url-pattern>*.cs</url-pattern>
    </servlet-mapping>

基础知识
*.cs
配置了xmls

<servlet-mapping>
<servlet-name>ABC</servlet-name>
<url-pattern>*.cs</url-pattern>
</servlet-mapping>

<!-- Configure a connection repository through which account-to-provider connections will be stored --> 
<beans:bean id="connectionRepository" class="org.springframework.social.connect.jdbc.JdbcConnectionRepository">
<beans:constructor-arg ref="dataSource" />
<beans:constructor-arg ref="textEncryptor" />
</beans:bean>



<!-- Configure a Facebook service provider -->
<beans:bean class="org.springframework.social.facebook.connect.FacebookServiceProvider">
<beans:constructor-arg index="0" value="564846465216" />
<beans:constructor-arg index="1" value="f4554iojfjh9iu7km54f54pok5ok4" />
<beans:constructor-arg index="2" ref="connectionRepository" />
</beans:bean>

<beans:bean id="textEncryptor" class="org.springframework.security.crypto.encrypt.Encryptors" factory-method="noOpText" />

<beans:bean class="org.springframework.social.web.connect.ConnectController">
<beans:constructor-arg index="0" value="http://localhost:8080/CitySpanks/" />
</beans:bean>

基础知识
*.cs
我指的是这个链接

在我的jsp中

<a href="<c:url value="connect/facebook" />">Connect to Facebook</a>

我遗漏了什么???我在点击上面的链接时不断收到404错误


谢谢:)

DispatcherServlet映射到*.cs,但是JSP中的链接是/connect/facebook(相对于应用程序根)。该URL不以.cs结尾,因此不存在匹配项,DispatcherServlet也不会参与其中

尽管您仍然可以将DispatcherServlet映射到任意URL模式,但自Spring 3.0以来的“最佳实践”是将其简单地映射到“/”,以允许它响应各种URL,包括RESTful API的URL


当然,这也意味着DispatcherServlet将响应对图像、样式表、javascript和其他资源的请求,这可能不是您想要的。并且是为了解决这个问题而创建的。有关更多详细信息,请参阅参考文档和。

我不确定您在项目中的位置,但我认为以下内容很容易被忽略

如果你看一看样本项目,你会注意到

spring-social-showcase-sec/src/main/webapp/WEB-INF/views/connect
存在以下页面: status.jsp、facebookConnect.jsp、facebookConnected.jsp

在示例项目中,当请求以下内容(左)时,它将解析下面的.jsp(右):

这里记录了这一点:

因此,要使该示例在代码中工作,您必须创建与上面的.jsp相同的目录结构“WEB-INF/views/connect/”。否则将找不到它们,因此将使用404。我相信这是由
ConnectController
类在幕后解决的,如上面链接的文档所述


但是,您可能希望从使用spring social示例中的web.xml配置开始,一旦掌握了窍门,就从那里开始

<!-- Processes application requests -->
<servlet>
  <servlet-name>appServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value></param-value>
  </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>appServlet</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

appServlet
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
1.
appServlet
/

用户在尝试访问映射到“连接到facebook”按钮的
connect/facebook
时获得404
<!-- Processes application requests -->
<servlet>
  <servlet-name>appServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value></param-value>
  </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>appServlet</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>