404上的错误/ spring_security_login春季安全3.2迁移从Tomcat 6到T

2019-09-30 07:55发布

它已经在这里已经三天,我正在争夺再次让我的应用程序的工作。 球场:我使用了Spring Security的3.2和在Tomcat 6运行良好的应用程序。

我想我所有的应用程序迁移到Tomcat 7,所以这就是为什么我想这一点。

但是:我每次访问我的应用程序的根目录时,我得到一个404错误页面,使用/ spring_security_login写在URL。 对于写入/ spring_security_login,似乎部分合法的,因为弹簧被设置为创建自己的登录表单。 但是,为什么404错误? 在Tomcat 6,用同样的web.xml和的applicationContext的安全性,该网站运行良好。

最后但并非最不重要的,我登录通过Spring Security的LDAP提供制作,所以增加了复杂性的一个多水平...

这里是我的web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>MYAPP</display-name>

  <!-- où se trouve la conf spring: -->
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/applicationContext-security.xml</param-value>
  </context-param>

  <listener>
      <listener-class>
          org.springframework.web.context.ContextLoaderListener
      </listener-class>
  </listener>

  <listener>
    <listener-class>
        org.springframework.security.web.session.HttpSessionEventPublisher
    </listener-class>
  </listener>

<filter>
  <filter-name>springSecurityFilterChain</filter-name>
  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

  <!-- Reads request input using UTF-8 encoding -->
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>

  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

<filter-mapping>
  <filter-name>springSecurityFilterChain</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

  <!-- configuration spring -->
  <servlet>
    <servlet-name>myapp-webapp</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>3</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>myapp-webapp</servlet-name>
    <url-pattern>*.do</url-pattern>
    <url-pattern>/remoting/*</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.png</url-pattern>
    <url-pattern>*.js</url-pattern>
    <url-pattern>*.css</url-pattern>
    <url-pattern>*.gif</url-pattern>
  </servlet-mapping>

  <resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/myapp_database</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

</web-app>

而我的applicationContext-security.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:s="http://www.springframework.org/schema/security"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd">

    <s:global-method-security secured-annotations="disabled">
    </s:global-method-security>

    <s:http pattern="/styles/**" security="none"/>
    <s:http pattern="/js/**" security="none"/>
    <s:http pattern="/img/**" security="none"/>
    <s:http pattern="/html/**" security="none"/>
    <s:http pattern="/remoting/**" security="none"/>

    <!-- config ldap activee use-expressions="true"  -->
    <s:http auto-config="true" create-session="always" access-decision-manager-ref="accessDecisionManager">
        <s:intercept-url pattern="/cancelPreviousAction.do" access="P_MYAPP_RW" />
        <s:intercept-url pattern="/**" access="P_MYAPP_RO" />
        <s:session-management>
            <s:concurrency-control max-sessions="1" />
        </s:session-management>
        <s:form-login />
        <s:logout/>
    </s:http>

    <s:authentication-manager>
        <s:authentication-provider ref="ldapProvider"></s:authentication-provider>
    </s:authentication-manager>

    <bean id="contextSource"
        class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
        <constructor-arg value="..." />
        <property name="userDn" value="..." />
        <property name="password" value="..." />
    </bean>

    <bean id="ldapProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
        <constructor-arg>
            <bean class="org.springframework.security.ldap.authentication.BindAuthenticator">
                <constructor-arg ref="contextSource" />
                <property name="userSearch">
                    <bean id="userSearch"
                        class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
                        <constructor-arg index="0" value="..." />
                        <constructor-arg index="1" value="..." />
                        <constructor-arg index="2" ref="..." />
                    </bean>
                </property>
            </bean>
        </constructor-arg>

        <constructor-arg>
            <bean class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator">
                <constructor-arg ref="contextSource" />
                <constructor-arg value="..." />
                <property name="rolePrefix" value="" />
                <property name="searchSubtree" value="true" />
                <property name="convertToUpperCase" value="false" />
            </bean>
        </constructor-arg>
    </bean>

    <bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">
        <property name="allowIfAllAbstainDecisions" value="false" />
        <property name="decisionVoters">
            <bean class="org.springframework.security.access.vote.RoleVoter">
                <property name="rolePrefix" value=""/>
            </bean>
        </property>
    </bean> 

</beans>

任何人有一个线索?

不过,我觉得一个时间,这可能是我的Tomcat的conf这将是原因,但现在当我把我的应用程序的根URL时,/ spring_security_login本身附加在URL中,所以我觉得春天Seuciryt内部重定向工作以及.. 。

注意:当我从web.xml文件中删除春季安全过滤,应用效果很好(除了登录/安全部分不用说了)。

提前致谢 !

Answer 1:

事实上,问题是,Tomcat的6下,我已经overrided默认的servlet的定义。

在已经搜查长的时间和很长的时间,我想评论的默认servlet定义...和一切工作。

所以在web.xml中,注释以下行具有相同的:

  <!-- 
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.png</url-pattern>
    <url-pattern>*.js</url-pattern>
    <url-pattern>*.css</url-pattern>
    <url-pattern>*.gif</url-pattern>
  </servlet-mapping> -->

它固定的一切。



文章来源: 404 Error on /spring_security_login Spring Security 3.2 after migrating from Tomcat 6 to Tomcat 7