gpt4 book ai didi

java - j_spring_security_check 404 问题

转载 作者:搜寻专家 更新时间:2023-10-31 20:30:17 27 4
gpt4 key购买 nike

我正在尝试让我的 spring + hibernate + spring-security 和 tiles2 - “HelloWorld”应用程序正常工作,遵循 this guide (不幸的是它是德语)。

我的问题是在登录我的应用程序时收到“404”错误消息。重定向到登录页面按预期工作,但是当我点击登录按钮时我无法到达“http://localhost:8080/App/j_spring_security_check”。

我的 web.xml 看起来是这样的:

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/defs/applicationContext.xml
/WEB-INF/defs/applicationContext-security.xml
</param-value>
</context-param>

<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.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>

applicationContext-security.xml 文件看起来是这样的......

<http use-expressions="true">
<intercept-url pattern="/index.html" access="permitAll" />
<intercept-url pattern="/timeout.html" access="permitAll" />
<intercept-url pattern="/redirect.html" access="permitAll" />
<intercept-url pattern="/media/**" access="permitAll" />
<intercept-url pattern="/includes/**" access="permitAll" />
<intercept-url pattern="/office/**" access="hasRole('ROLE_USER')" />
<intercept-url pattern="/office/admin/**" access="hasRole('ROLE_ADMIN')" />

<form-login login-page="/index.html"
authentication-failure-url="/index.html?login_error=1"
default-target-url='/office/kunden.html'
always-use-default-target='true'
/>
<logout logout-success-url="/index.html" />
<remember-me />
<session-management invalid-session-url="/index.html">
<concurrency-control max-sessions="2" error-if-maximum-exceeded="true" />
</session-management>
</http>

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

数据库连接好像没问题

如果有人能给我提示,我会很高兴,因为我已经进行了大量的谷歌搜索,但还没有找到解决方案。

我用的是spring 3.1和tomcat 7.0.23

最佳答案

我会检查两件事:

  1. 请求派送
  2. Spring 安全配置

要检查请求分派(dispatch),只需首先在 servlet 容器中确保您的应用程序可访问。意思是,你提到了http://localhost:8080/App/j_spring_security_check .您的应用程序可以通过该 URL 访问吗?是否http://localhost:8080/App显示正确的内容 (HTTP 200)?此外,确保调度程序 servlet 已正确配置。在您提供的教程中,有这一部分:

  <!--  Spring Hauptteil -->

<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>

如果您没有在您的 web.xml 中提供它,那么您的请求甚至可能在最终通过 spring-security 检查之前无法正确发送。

如果这对您没有帮助,请试试这个。

正在关注 documentation ,最小配置应该足以检查您的设置是否正确。如果您遵循了教程,您可能会犯一些小错误(例如 typeo),这将导致 spring-security 无法正常启动。然后很容易跳过记录器输出中的一些错误信息。我建议您执行以下操作。

  1. 更改您的 applicationContext-security.xml 以支持文档中提供的最少配置。
  2. 启动应用程序并转到 http://localhost:8080/App/j_spring_security_check

如果您得到正确的响应 - 尝试修改配置直到完成。

学习点DelegatingFilterProxy(在 web.xml 中定义)真正做的是将请求委托(delegate)给由 Spring 的 IoC 管理的其他过滤器。此过滤器是通过安全命名空间在 applicationContext-security 中定义的。如果由于某种原因这不起作用,过滤器将不会被初始化,并且您最终可能会看到 http 404,而不管应用程序的其余部分是否正常启动。

Uffff,很多文字 ;)

关于java - j_spring_security_check 404 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8808207/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com