1

複数のログインページのソリューションを実装しようとしています。私は現在、一意の LoginController を持っており、誰かが /app_name/login.htm を要求したときにログイン jsp を取得するだけです。このままにしておきたいのですが、さらに 2 つの場所 (/app_name/customers/login.htm と /app_name/employees/login.htm) を追加し、それぞれに個別のコントローラー CustomerLoginController と EmployeeLoginController を追加します。

したがって、私の考えでは、従業員は自分の URL を介してアクセスし、顧客は自分の URL を使用してアクセスしますが、誰かが古い login.htm にアクセスしようとすると、コントローラーは保存された Cookie と顧客をデフォルトとして使用して、それぞれのログインにリダイレクトします。

私には良いように思えますが、/app_name/customers/login.htm または /app_name/employees/login.htm にアクセスしようとすると、認証されていないときに login.htm にリダイレクトされます。

なぜそれらが解決されないのか、私には本当にわかりません。意見、提案、ガイド、チュートリアル、サンプル コード、またはリンクは役に立ちます。

私が取り組んでいるプロジェクトには、この構成があります

Web.xml

<!-- Spring Security -->
<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>

サーブレット-config.xml

<!-- Controllers Mapping -->
<context:component-scan base-package="com.company.project.controllers">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

security-context.xml

<sec:http auto-config="false" entry-point-ref="authenticationProcessingFilterEntryPoint" access-denied-page="/warning/accessDenied.htm" >
    <sec:intercept-url pattern="/employees/login.htm" filters="none" />
    <sec:intercept-url pattern="/customers/login.htm" filters="none" />
    <sec:intercept-url pattern="/login**" filters="none" />
</sec:http>
<bean id="authenticationProcessingFilterEntryPoint" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint">
    <property name="loginFormUrl" value="/login.htm" />
    <property name="forceHttps" value="false" />
</bean>
<bean id="authenticationProcessingFilter" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilter">
    <property name="authenticationFailureUrl" value="/login.htm?login_error=1"/>
    <property name="defaultTargetUrl" value="/home.htm"/>
    <property name="alwaysUseDefaultTargetUrl" value="true"/>
    <property name="filterProcessesUrl" value="/j_spring_security_check"/>
</bean>

PD: Spring 2.5.4 と Spring Security 2.0.4 を使用 -_- 知っ​​ていますが、かなりの規模のプロジェクトであり、しばらくの間運用されています

4

1 に答える 1

0

複数のログイン ページは、2 つの別個の http 宣言で実行できます。

<http pattern="/customers/**" authentication-manager-ref="customerAuthenticationManager">
    <form-login login-page="/customers/login" default-target-url="/customers" login-processing-url="/customers/j_spring_security_check"/>
    <logout logout-url="/customers/logout"/>
    ...
</http>

<http pattern="/employees/**" authentication-manager-ref="employeeAuthenticationManager">
    <form-login login-page="/employees/login" default-target-url="/employees" login-processing-url="/employees/j_spring_security_check"/>
    <logout logout-url="/employees/logout"/>
    ...
</http>
于 2013-11-14T18:23:24.663 に答える