1

我正在按照官方Spring 参考来设置安全性。但是,当它应该加载默认的 spring 登录 jsp 时,我收到 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>/index</url-pattern>
</filter-mapping>

以及相关部分applicationContext.xml

<security:http auto-config='true'>
    <security:intercept-url pattern="/index" access="ROLE_USER" />
</security:http> 
<security:authentication-manager>
    <security:authentication-provider>
        <security:user-service>
            <security:user name="user" password="mypassword" authorities="ROLE_USER, ROLE_ADMIN" />
        </security:user-service>
    </security:authentication-provider>
</security:authentication-manager>

我想我已经加载了所有相关的依赖项(以及其他诸如 tx 和核心)我有:

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>3.0.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>
    <version>3.0.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
    <version>3.0.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-taglibs</artifactId>
    <version>3.0.5.RELEASE</version>
</dependency>
4

3 回答 3

3

您希望将应用程序中的每个 URL 映射为通过 Spring Security 拦截器进行过滤,如下所示:

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

拦截器将在遇到登录 URL 时以及在它到达您的任何 servlet 或 JSP 之前对其进行处理。

于 2011-06-29T09:26:29.180 回答
1

与 Pavel 给出的答案类似,Spring Security 过滤器链将处理某些特定的 URL,例如j_spring_security_check并基于这些特定的 URL 执行功能。因此,如果您的 没有url-patternof /*,您需要确保<filter-mapping>至少明确包含那些对您正在使用的 Spring Security 工作流很重要的特定 URL。根据您的身份验证机制(用户名/密码、OAuth、OpenID 等),这些可能需要也可能不需要您深入研究源代码。或者,您可以尝试使用通配符之类的/j_*东西。那应该可以解决您的问题。

于 2011-06-29T16:00:19.147 回答
0

我怀疑您需要DispatcherServlet,因为某些东西(servlet?)需要在响应中返回登录页面,我很确定它不是过滤器。我会尽力做你所做的,看看会发生什么。

同时,您可以从 spring-security 存档中捆绑的示例应用程序开始,并将其分解为您需要的内容。到目前为止,这一直对我有用。

于 2011-06-29T15:22:01.470 回答