我一直在尝试为多个登录页面实施解决方案。我目前有一个唯一的LoginController,它所做的就是在有人请求/app_name/login.htm时检索登录jsp。我希望保持这种状态,但还要添加两个位置:/app_name/customers/login.htm和/app_name/employees/login.htm,每个位置都有一个单独的控制器CustomerLoginController和EmployeeLoginController。
所以我的想法是员工通过他们的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>
servlet的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>
安全-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 -_-我知道,但它是一个相当大的项目,它已经在生产中一段时间了
答案 0 :(得分: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>