View Javadoc
1   package org.oxerr.spring.security.wechat.authentication;
2   
3   import org.oxerr.spring.security.wechat.core.AuthDenyException;
4   import org.oxerr.spring.security.wechat.core.WeChatMessageSource;
5   import org.oxerr.spring.security.wechat.core.userdetails.WeChatUserDetailsService;
6   import org.springframework.beans.factory.InitializingBean;
7   import org.springframework.context.MessageSource;
8   import org.springframework.context.MessageSourceAware;
9   import org.springframework.context.support.MessageSourceAccessor;
10  import org.springframework.security.authentication.AuthenticationProvider;
11  import org.springframework.security.core.Authentication;
12  import org.springframework.security.core.AuthenticationException;
13  import org.springframework.security.core.userdetails.UserDetails;
14  import org.springframework.util.Assert;
15  
16  public class WeChatAuthenticationProvider implements AuthenticationProvider,
17  		InitializingBean, MessageSourceAware {
18  
19  	protected MessageSourceAccessor messages = WeChatMessageSource.getAccessor();
20  	private final WeChatUserDetailsService weChatUserDetailsService;
21  
22  	public WeChatAuthenticationProvider(WeChatUserDetailsService weChatUserDetailsService) {
23  		this.weChatUserDetailsService = weChatUserDetailsService;
24  	}
25  
26  	/**
27  	 * {@inheritDoc}
28  	 */
29  	@Override
30  	public Authentication authenticate(final Authentication authentication)
31  			throws AuthenticationException {
32  		final WeChatAuthenticationToken authenticationToken = (WeChatAuthenticationToken) authentication;
33  
34  		final String code = authenticationToken.getCredentials();
35  
36  		if (code.equals("authdeny")) {
37  			throw new AuthDenyException(messages.getMessage(
38  					"WeChatAuthenticationProvider.authdeny",
39  					"User denied."));
40  
41  		}
42  
43  		final UserDetails userDetails = weChatUserDetailsService.loadUserByCode(code);
44  		return new WeChatAuthenticationToken(userDetails);
45  	}
46  
47  	/**
48  	 * {@inheritDoc}
49  	 */
50  	@Override
51  	public boolean supports(Class<?> authentication) {
52  		return WeChatAuthenticationToken.class.isAssignableFrom(authentication);
53  	}
54  
55  	/**
56  	 * {@inheritDoc}
57  	 */
58  	@Override
59  	public void afterPropertiesSet() throws Exception {
60  		Assert.notNull(this.weChatUserDetailsService, "A weChatUserDetailsService must be set.");
61  	}
62  
63  	/**
64  	 * {@inheritDoc}
65  	 */
66  	@Override
67  	public void setMessageSource(MessageSource messageSource) {
68  		this.messages = new MessageSourceAccessor(messageSource);
69  	}
70  
71  }