Spring Security 4在一台机器中引发HTTP状态404错误但在另一台机器中运行良好

时间:2016-11-25 21:20:51

标签: spring-security web.xml glassfish-4 applicationcontext

我正在开发一个在Glassfish 4.1上运行的Java应用程序,并使用Spring Security 4.2.0进行用户身份验证。 Spring Security在我的开发环境和生产服务器中运行了好几个月,这意味着我可以成功地对存储在相应服务器(开发或生产)中的用户凭据进行身份验证,并重定向到应用程序的主页面然后。

但本周,我公司的另一位开发人员开始研究该项目,在获得源代码并配置他的开发环境后,当他运行应用程序时,在点击登录按钮后,他每次都会得到这个:

enter image description here

这些是我在应用程序中配置Spring Security身份验证的文件:

Web.xml中

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

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

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

的applicationContext.xml

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/jee 
    http://www.springframework.org/schema/jee/spring-jee.xsd
    http://www.springframework.org/schema/security 
    http://www.springframework.org/schema/security/spring-security.xsd">

    <http auto-config="true" use-expressions="true">
        <intercept-url pattern="/login*" access="permitAll"/>
        <intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
        <form-login 
            login-page="/login.jsp" 
            default-target-url="/BMSim.html"
            always-use-default-target="true"
            authentication-failure-url="/login.jsp?error" 
            username-parameter="username"
            password-parameter="password" />
        <logout logout-url="/logout" logout-success-url="/login.jsp?logout"  />
        <!-- disable csrf protection -->
        <csrf disabled="true"/>
        <!-- allow SmartGWT to create frames and call servlets from there -->
        <headers>
            <frame-options policy="SAMEORIGIN" />
        </headers>
    </http>

    <jee:jndi-lookup id="dataSource" jndi-name="jdbc/BMSim" expected-type="javax.sql.DataSource" />

    <authentication-manager>
        <authentication-provider>
            <jdbc-user-service data-source-ref="dataSource"
                users-by-username-query="select username,password, enabled from users where username=?"
                authorities-by-username-query="select username, authority from authorities where username =?  " />
        </authentication-provider>
    </authentication-manager>

</beans:beans>

的login.jsp

<html>
    <body class="login t_center" onload="document.f.username.focus();">
        <form name="f" action="login" method="POST">
            <label>user: </label>
            <input id="username" type="text" name="username" />

            <label>password: </label>
            <input id="password" type="password" name="password" />

            <input class="login-button" name="submit" type="submit" value="login"/>

        </form>
    </body>
</html>

的glassfish-web.xml中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app>
    <context-root>/BMSim</context-root>
</glassfish-web-app>

我们已经尝试了很多不同的东西,但是在Spring Security(或Spring的框架的任何部分)中没有专家,我们似乎无法找到问题。

关于什么可能导致这种奇怪行为的任何想法(在某些环境中工作,但在其他环境中工作)?

1 个答案:

答案 0 :(得分:0)

这终于解决了,结果是pom.xml(v4.2)中定义的SQL Server驱动程序版本与放置在Glassfish域的lib文件夹(v4)上的实际jar之间存在冲突。 0)。