2

我的应用程序中有两个 DispatcherServlet。一种是用于 jsp 服务并调度管理员的地址。

<servlet>
    <servlet-name>adminServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/appServlet/adminServlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>adminServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

第二个 DispatcherServlet 调度发送 xml 或 json 的地址。

<servlet>
    <servlet-name>userServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/appServlet/userServlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>userServlet</servlet-name>
    <url-pattern>/user/*</url-pattern>
</servlet-mapping>

还有 DelegatingFilterProxy 保证安全

<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>

安全上下文配置文件:

<http auto-config="true" use-expressions="true">
    <intercept-url pattern="/login.do"
        access="permitAll" requires-channel="http" />
    <intercept-url pattern="/*"
        access="hasRole('ROLE_USER')" requires-channel="http" />
    <intercept-url pattern="/admin/*"
        access="hasRole('ROLE_ADMIN')" requires-channel="http" />
    <form-login login-page="/login.do"
        login-processing-url="/loginProcess" username-parameter="user"
        password-parameter="password" default-target-url="/admin" />
    <logout logout-url="/logout.do"
        invalidate-session="true" />
    <remember-me key="secCh4"
        token-validity-seconds="3600" data-source-ref="dataSource" />
    <session-management
        session-fixation-protection="newSession">
    </session-management>
    <intercept-url pattern="/user/*" access="hasRole('ROLE_USER')" />
</http>

由 adminServlet 调度的服务部分需要认证并且是安全的,而由 userServlet 调度的部分是完全不安全的,不需要任何认证。我不知道为什么,我将 DelegatingFilterProxy 中的 url-pattern 设置为 /* 并且我也设置了

<intercept-url pattern="/user/*" access="hasRole('ROLE_USER')" />

有任何想法吗?

4

1 回答 1

2

DelegatingFilterProxy无关DispatcherServlet。实际上,不需要Spring MVC ,您可以使用任何其他框架,例如Struts

使用您的规则<intercept-url pattern="/user/*" access="hasRole('ROLE_USER')" />,您指定拦截诸如/user/list/or之类的 url /user/4,但不是/user/4/save。如果你想拦截所有以/user/try开头的 url <intercept-url pattern="/user/**" access="hasRole('ROLE_USER')" />您可以在这里阅读更多内容。

无论如何,请记住intercept-url顺序也很重要。

于 2012-09-04T14:34:38.070 回答