我正在使用 Spring security 拦截器来错误记录用户,但我找不到解决方法。
我特别想保存最后登录的用户,但我不知道如何实现这一点。
请帮帮我。
我正在使用 Spring security 拦截器来错误记录用户,但我找不到解决方法。
我特别想保存最后登录的用户,但我不知道如何实现这一点。
请帮帮我。
是的,你可以这么做。您可以在配置 xml 文件中的标记中定义以下标记。
<security:form-login login-page="/sessionexpired"
login-processing-url="/j_spring_security_check"
default-target-url="/submitLogin"
always-use-default-target="true"
authentication-failure-handler-ref="customAuthenticationFailureHandler"/>
您可以看到最后一个参数集authentication-failure-handler-ref它的值是对同一 xml 文件中定义的以下 bean 的引用。
<bean id="customAuthenticationFailureHandler" class="com.xxx.xxx.xxx.CustomFilter">
<constructor-arg type="String" value="loginfailed"></constructor-arg>
<constructor-arg type="org.hibernate.SessionFactory" ref="sessionFactory"></constructor-arg>
</bean>
此 bean 中定义的类是您自己的类,它将获取有关失败登录详细信息的信息。
public class CustomFilter extends SimpleUrlAuthenticationFailureHandler {
private String defaultFailureUrl;
private SessionFactory sessionFactory;
public CustomFilter(String defaultFailureUrl,SessionFactory sessionFactory) {
super();
this.defaultFailureUrl = defaultFailureUrl;
this.sessionFactory = sessionFactory;
}
@Override
public void onAuthenticationFailure(HttpServletRequest request,
HttpServletResponse response, AuthenticationException exception)
throws IOException, ServletException {
// TODO Auto-generated method stub
String userName = request.getParameter("j_username");;
/*System.out.println("CustomFilter Begins");
System.out.println("CustomeFilter.username :: " + userName);
System.out.println("getMessage :: " + exception.getMessage());
System.out.println("exception :: " + exception.getClass().getSimpleName());
System.out.println("RemoteAddr :: " + request.getRemoteAddr()); */
}
}
当身份验证失败时onAuthenticationFailure
,将调用此类的方法,您可以在那里获取用户详细信息以登录数据库或日志文件。
希望这对您有所帮助。干杯。