У меня есть приложение Spring Security 3, в которое я вхожу и работаю хорошо.Я хотел улучшить свой собственный UsernamePasswordAuthenticationFilter для моего приложения.Я следовал этому руководству:
http://mrather.blogspot.com/2010/02/extending-usernamepasswordauthenticatio.html
Мой класс фильтра:
package security;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class CustomUsernamePasswordAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
@Override
protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, Authentication authResult) throws IOException, ServletException {
super.successfulAuthentication(request, response, authResult);
System.out.println("==successful login==");
}
@Override
protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, AuthenticationException failed) throws IOException, ServletException {
super.unsuccessfulAuthentication(request, response, failed);
System.out.println("==failed login==");
}
}
Мой файл конфигурации xml безопасности:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.xsd">
<global-method-security/>
<http entry-point-ref="loginUrlAuthenticationEntryPoint"/>
<beans:bean id="loginUrlAuthenticationEntryPoint"
class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
<beans:property name="loginFormUrl" value="/login.html"/>
</beans:bean>
<beans:bean id="customUsernamePasswordAuthenticationFilter"
class="security.CustomUsernamePasswordAuthenticationFilter">
<beans:property name="authenticationManager" ref="authenticationManager"/>
<beans:property name="authenticationFailureHandler" ref="failureHandler"/>
<beans:property name="authenticationSuccessHandler" ref="successHandler"/>
</beans:bean>
<beans:bean id="successHandler"
class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler">
<beans:property name="defaultTargetUrl" value="/login.html"/>
</beans:bean>
<beans:bean id="failureHandler"
class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
<beans:property name="defaultFailureUrl" value="/login.html?login_error=true"/>
</beans:bean>
<http auto-config="false" disable-url-rewriting="true">
<custom-filter position="FORM_LOGIN_FILTER" ref="customUsernamePasswordAuthenticationFilter"/>
<intercept-url pattern="/login.html" filters="none"/>
<intercept-url pattern="/css/*" filters="none"/>
<intercept-url pattern="/**" access="ROLE_USER"/>
</http>
<authentication-manager alias="authenticationManager">
<authentication-provider>
<password-encoder hash="sha-256"/>
<user-service>
<user name="sdf" password="6b86d273ff34fce19d6dddf5747ada4eaa22f1d49c01e52ddb7875b4b"
authorities="ROLE_USER"/>
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
Однакокогда я запускаю свое приложение, оно не перенаправляет на страницу входа, по умолчанию оно переходит на индексную страницу и выдает
404 Not found error
для всех моих веб-страниц.Есть идеи?Хорошо ли я сконфигурировал свое приложение?
PS: Что пишет в уроке:
Примечание. Поскольку мы заменяем стандартный FORM_LOGIN_FILTER, нам не следует использовать
, поэтому я удалил это:
<form-login
login-page="/login3.html"
login-processing-url="/j_spring_security_check"
default-target-url="/index.html"
always-use-default-target="true"/>
<logout logout-url="/j_spring_security_logout"
logout-success-url="/login.html"/>
из моего XML-файла.
Также необходимо определить successHandler и faultHandler, потому что я их не перезаписывал.Если я делаю это, потому что я заменяю фильтр (или из-за - http auto-config="false"
Я не знаю истинное назначение этой строки, если вы объясните, что вы приветствуете) я должен определить что-то еще для безопасности?
Я новичок в Spring Security 3 и Spring.