Spring Security 4 在一台机器上抛出 HTTP 状态 404 错误,但在另一台机器上运行正常
Spring Security 4 Throws HTTP Status 404 Error in One Machine But Works Fine In Another
我正在开发 Java 应用程序,该应用程序在 Glassfish 4.1 上运行并使用 Spring Security 4.2.0 进行用户身份验证。 Spring 几个月来,安全性在我的开发环境和生产服务器中一直运行良好,这意味着我可以根据存储在相应服务器(开发或生产)中的用户凭据成功进行身份验证,并重定向到之后是应用程序的主页。
但这周,我公司的另一个开发人员开始了这个项目,在获得源代码并配置了他的开发环境之后,当他运行应用程序时,点击登录按钮后,他每次都会得到这个时间:
这些是我用来在我的应用程序中配置 Spring 安全身份验证的文件:
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 安全方面的专家(或 Spring 框架的任何部分,就此而言),我们似乎无法能够找到问题所在。
关于导致这种奇怪行为的原因(在某些环境中工作,但在其他环境中不工作)有什么想法吗?
终于解决了,原来是pom.xml(v4.2)中定义的SQL服务器驱动的版本和实际放置的jar有冲突Glassfish 域的 lib 文件夹 (v4.0)。
我正在开发 Java 应用程序,该应用程序在 Glassfish 4.1 上运行并使用 Spring Security 4.2.0 进行用户身份验证。 Spring 几个月来,安全性在我的开发环境和生产服务器中一直运行良好,这意味着我可以根据存储在相应服务器(开发或生产)中的用户凭据成功进行身份验证,并重定向到之后是应用程序的主页。
但这周,我公司的另一个开发人员开始了这个项目,在获得源代码并配置了他的开发环境之后,当他运行应用程序时,点击登录按钮后,他每次都会得到这个时间:
这些是我用来在我的应用程序中配置 Spring 安全身份验证的文件:
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 安全方面的专家(或 Spring 框架的任何部分,就此而言),我们似乎无法能够找到问题所在。
关于导致这种奇怪行为的原因(在某些环境中工作,但在其他环境中不工作)有什么想法吗?
终于解决了,原来是pom.xml(v4.2)中定义的SQL服务器驱动的版本和实际放置的jar有冲突Glassfish 域的 lib 文件夹 (v4.0)。