2

私のアプリには 2 つの DispatcherServlets があります。1 つは 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>

2 番目の 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')" />ような URL をインターセプトするように指定していますが、 はインターセプトしません。で始まるすべての URL を傍受したい場合は、. ここでもう少し読むことができます。/user/list//user/4/user/4/save/user/<intercept-url pattern="/user/**" access="hasRole('ROLE_USER')" />

intercept-urlとにかく、順序も重要であることを忘れないでください。

于 2012-09-04T14:34:38.070 に答える