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
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
49
50 @Override
51 public boolean supports(Class<?> authentication) {
52 return WeChatAuthenticationToken.class.isAssignableFrom(authentication);
53 }
54
55
56
57
58 @Override
59 public void afterPropertiesSet() throws Exception {
60 Assert.notNull(this.weChatUserDetailsService, "A weChatUserDetailsService must be set.");
61 }
62
63
64
65
66 @Override
67 public void setMessageSource(MessageSource messageSource) {
68 this.messages = new MessageSourceAccessor(messageSource);
69 }
70
71 }