spring security 实现form-login功能

来源:互联网 发布:centos linux 删除软件 编辑:程序博客网 时间:2024/05/21 16:58

一、首先我们知道自定义一个Security的filter的格式为

<custom-filter ref="myFilter"  position="FORM_LOGIN_FILTER"/><!-- position 可以换成 befor after-->

其中security过滤的加载顺序如下

这里写图片描述
其中需要重写的是用户登录filter 也就是 FORM_LOGIN_FITER

二、
然后我们需要自定义一个类,继承AbstractAuthenticationProcessingFilter

public class MySpecialAuthenticationFilter extends  AbstractAuthenticationProcessingFilter

三、然后在配置bean

 <beans:bean id="myFilter" class="MySpecialAuthenticationFilter">        <beans:property name="authenticationManager" ref="authenticationManager"/>        <beans:property name="authenticationSuccessHandler" ref="authenticationSuccessHandler"/>        <beans:property name="authenticationFailureHandler" ref="authenticationFailureHandler"/>    </beans:bean>

其中authenticationManager的配置如下

<authentication-manager alias="authenticationManager"                            erase-credentials="false">        <authentication-provider user-service-ref="userDetailsService"/>    </authentication-manager>

其中userDetailsService是实现UserDetailsService接口,我们可以自己在里面实现一些用户验证的一些方法
四、增加EntryPoint

 <http entry-point-ref="loginUrlAuthenticationEntryPoint"> ... </http><beans:bean id="loginUrlAuthenticationEntryPoint" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">    <beans:constructor-arg value="/login"/></beans:bean>

这样就是替换了原来的form-login 并且可以方便的实现我们自己的密码验证逻辑

总结:
在spring—security中增加

 <http entry-point-ref="loginUrlAuthenticationEntryPoint">    <custom-filter ref="myFilter"  position="FORM_LOGIN_FILTER"/>    ...</http><beans:bean id="myFilter" class="MySpecialAuthenticationFilter">    <beans:property name="authenticationManager" ref="authenticationManager"/>    <beans:property name="authenticationSuccessHandler" ref="authenticationSuccessHandler"/>    <beans:property name="authenticationFailureHandler" ref="authenticationFailureHandler"/></beans:bean><beans:bean id="loginUrlAuthenticationEntryPoint" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">    <beans:constructor-arg value="/login"/></beans:bean><beans:bean id="authenticationSuccessHandler"                class="com.netease.urs.web.user.service.api.ChainAuthenticationSuccessHandler">    ...</beans:bean><beans:bean id="authenticationFailureHandler"                class="com.netease.urs.web.user.service.api.ChainAuthenticationFailureHandler">    ...</beans:bean><authentication-manager alias="authenticationManager"                            erase-credentials="false">    <authentication-provider user-service-ref="userDetailsService"/></authentication-manager>

需要增加2个类,第一个是实现了继承AbstractAuthenticationProcessingFilter的MySpecialAuthenticationFilter(xml中对应)
第二个是实现了UserDetailsService接口的userDetailsService(xml中对应)

0 0
原创粉丝点击