1

我无法连接到自动生成的 Spring Security 登录页面。根据文档,在您的 security-context.xml 中包含以下行将使 Spring 生成一个 html 登录表单,并在尝试连接到特定 URL 时将用户重定向到该表单:

<http auto-config="true" >
    <intercept-url pattern="/management-console" access="ROLE_ADMIN"/>
</http>

<authentication-manager ... />

这是我的其余配置。Web.xml:

<context-param>
    <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:/context/applicationContext.xml <!-- I am importing my security-context.xml in here -->
        <param-value>
</context-param>

<!-- Security Configuration -->
<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>/management-console</url-pattern>
</filter-mapping>

我已经尝试直接在 web.xml 中导入 security-context.xml,但我仍然看到错误。

部署我的应用程序后,我可以毫无问题地连接到我指定的每个 URL。但是,当我尝试访问 localhost:{port}/{appName}/management-console 时,过滤器链将我重定向到 /spring_security_login(如预期的那样)。但是,我在转发后看到“HTTP 状态 405 - 不支持请求方法 'GET'”错误,并且控制台上出现以下内容(spring-mvc 是我给我的 servlet 的名称):

org.springframework.web.servlet.PageNotFound            | No mapping found for HTTP request with URI [/InternalManagementViewer/spring_security_login] in DispatcherServlet with name 'spring-mvc' |

当我错过在控制器中声明 POST/GET 映射之前,我已经看到了这个错误。根据文档,我不应该在我的控制器中包含这样的方法来处理 /spring_security_login 映射。根据我的阅读,spring 应该知道返回自动生成的登录 html 页面。

为了看看会发生什么,我在控制器中声明了一个方法来处理 /spring_security_login 映射。由于该函数返回void(因为我不知道生成的html登录页面的本地视图名称),它会查找名为“spring_security_login.jsp”的资源,该资源未在我的项目中显式创建,因此我得到“未找到 HTTP 资源”错误。

我被这个难住了,真的可以用手。非常感谢您看一看。

4

1 回答 1

2

springSecurityFilterChain对所有 URL应用过滤器:

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

springSecurityFilterChain是所有 Spring Security 功能的入口点。因此,如果此过滤器未应用于某些 URL,那么您将无法在那里使用 Spring Security(在这种情况下处理 /spring_security_login URL)。

于 2013-03-11T15:32:38.717 回答