You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.3 KiB
69 lines
2.3 KiB
package cc.bnblogs.springsecurity.validate.smscode; |
|
|
|
import org.springframework.security.authentication.AuthenticationServiceException; |
|
import org.springframework.security.core.Authentication; |
|
import org.springframework.security.core.AuthenticationException; |
|
import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter; |
|
import org.springframework.security.web.util.matcher.AntPathRequestMatcher; |
|
import org.springframework.util.Assert; |
|
|
|
import javax.servlet.http.HttpServletRequest; |
|
import javax.servlet.http.HttpServletResponse; |
|
|
|
public class SmsAuthenticationFilter extends AbstractAuthenticationProcessingFilter { |
|
|
|
public static final String MOBILE_KEY = "mobile"; |
|
|
|
private String mobileParameter = MOBILE_KEY; |
|
private boolean postOnly = true; |
|
|
|
|
|
public SmsAuthenticationFilter() { |
|
super(new AntPathRequestMatcher("/login/mobile", "POST")); |
|
} |
|
|
|
|
|
public Authentication attemptAuthentication(HttpServletRequest request, |
|
HttpServletResponse response) throws AuthenticationException { |
|
if (postOnly && !request.getMethod().equals("POST")) { |
|
throw new AuthenticationServiceException( |
|
"Authentication method not supported: " + request.getMethod()); |
|
} |
|
|
|
String mobile = obtainMobile(request); |
|
|
|
if (mobile == null) { |
|
mobile = ""; |
|
} |
|
|
|
mobile = mobile.trim(); |
|
|
|
SmsAuthenticationToken authRequest = new SmsAuthenticationToken(mobile); |
|
|
|
setDetails(request, authRequest); |
|
|
|
return this.getAuthenticationManager().authenticate(authRequest); |
|
} |
|
|
|
protected String obtainMobile(HttpServletRequest request) { |
|
return request.getParameter(mobileParameter); |
|
} |
|
|
|
protected void setDetails(HttpServletRequest request, |
|
SmsAuthenticationToken authRequest) { |
|
authRequest.setDetails(authenticationDetailsSource.buildDetails(request)); |
|
} |
|
|
|
public void setMobileParameter(String mobileParameter) { |
|
Assert.hasText(mobileParameter, "mobile parameter must not be empty or null"); |
|
this.mobileParameter = mobileParameter; |
|
} |
|
|
|
public void setPostOnly(boolean postOnly) { |
|
this.postOnly = postOnly; |
|
} |
|
|
|
public final String getMobileParameter() { |
|
return mobileParameter; |
|
} |
|
}
|
|
|