1
zhujie
5 天以前 ec15861e14c66c38b1a8f5fffc6975d7da6c315c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
package com.mzl.flower.config;
 
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mzl.flower.config.security.handler.SelfAuthenticationFailureHandler;
import com.mzl.flower.config.security.handler.SelfAuthenticationSuccessHandler;
import com.mzl.flower.config.security.provider.*;
import com.mzl.flower.service.impl.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.oauth2.provider.ClientDetailsService;
import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices;
 
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 
    @Autowired
    private ObjectMapper objectMapper;
 
    @Autowired
    private ClientDetailsService clientDetailsService;
 
    @Lazy
    @Autowired
    private AuthorizationServerTokenServices defaultAuthorizationServerTokenServices;
 
    @Autowired
    private WebUserDetailsService webUserDetailsService;
 
    @Autowired
    private PartnerUserDetailsService partnerUserDetailsService;
 
    @Autowired
    private SupUserDetailsService supUserDetailsService;
 
    @Autowired
    private AdminUserDetailsService adminUserDetailsService;
 
    @Autowired
    private BaseUserDetailsService baseUserDetailsService;
 
    @Autowired
    private PhoneUserDetailsService phoneUserDetailsService;
 
    @Autowired
    private WechatUserDetailsService wechatUserDetailsService;
 
 
    /**
     * 注入AuthenticationManager接口,启用OAuth2密码模式
     *
     * @return
     * @throws Exception
     */
    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        AuthenticationManager manager = super.authenticationManagerBean();
        return manager;
    }
 
    /**
     * 通过HttpSecurity实现Security的自定义过滤配置
     *
     * @param httpSecurity
     * @throws Exception
     */
    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
                .requestMatchers().anyRequest()
                .and()
                .authorizeRequests()
                .antMatchers("/oauth/**").permitAll();
    }
 
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
 
    @Bean
    public SelfAuthenticationSuccessHandler selfAuthenticationSuccessHandler() {
        return SelfAuthenticationSuccessHandler.builder()
                .objectMapper(objectMapper)
                .clientDetailsService(clientDetailsService)
                .passwordEncoder(passwordEncoder())
                .authorizationServerTokenServices(defaultAuthorizationServerTokenServices).build();
    }
 
    @Bean
    public SelfAuthenticationFailureHandler selfAuthenticationFailureHandler() {
        return SelfAuthenticationFailureHandler.builder().objectMapper(objectMapper).build();
    }
 
    @Override
    public void configure(AuthenticationManagerBuilder auth) {
        auth.authenticationProvider(webAuthenticationProvider());
        auth.authenticationProvider(adminAuthenticationProvider());
        auth.authenticationProvider(userIdAuthenticationProvider());
        auth.authenticationProvider(partnerAuthenticationProvider());
        auth.authenticationProvider(supAuthenticationProvider());
        auth.authenticationProvider(phoneAuthenticationProvider());
    }
 
    @Bean
    public PartnerAuthenticationProvider partnerAuthenticationProvider() {
        PartnerAuthenticationProvider provider = new PartnerAuthenticationProvider();
        provider.setUserDetailsService(partnerUserDetailsService);
        provider.setHideUserNotFoundExceptions(false);
        provider.setPasswordEncoder(passwordEncoder());
        return provider;
    }
 
    @Bean
    public SupAuthenticationProvider supAuthenticationProvider() {
        SupAuthenticationProvider provider = new SupAuthenticationProvider();
        provider.setUserDetailsService(supUserDetailsService);
        provider.setHideUserNotFoundExceptions(false);
        provider.setPasswordEncoder(passwordEncoder());
        return provider;
    }
 
    /**
     * 普通登录认证
     *
     * @return
     */
    @Bean
    public WebAuthenticationProvider webAuthenticationProvider() {
        WebAuthenticationProvider provider = new WebAuthenticationProvider();
        provider.setUserDetailsService(webUserDetailsService);
        provider.setHideUserNotFoundExceptions(false);
        provider.setPasswordEncoder(passwordEncoder());
        return provider;
    }
 
    /**
     * 运营登录认证
     *
     * @return
     */
    @Bean
    public AdminAuthenticationProvider adminAuthenticationProvider() {
        AdminAuthenticationProvider provider = new AdminAuthenticationProvider();
        provider.setUserDetailsService(adminUserDetailsService);
        provider.setHideUserNotFoundExceptions(false);
        provider.setPasswordEncoder(passwordEncoder());
        return provider;
    }
 
    @Bean
    public UserIdAuthenticationProvider userIdAuthenticationProvider() {
        UserIdAuthenticationProvider provider = new UserIdAuthenticationProvider();
        provider.setUserDetailsService(wechatUserDetailsService);
        provider.setHideUserNotFoundExceptions(false);
        return provider;
    }
 
    /**
     * 手机验证码登录认证
     *
     * @return
     */
    @Bean
    public PhoneAuthenticationProvider phoneAuthenticationProvider() {
        PhoneAuthenticationProvider provider = new PhoneAuthenticationProvider();
        provider.setUserDetailsService(phoneUserDetailsService);
        provider.setHideUserNotFoundExceptions(false);
        return provider;
    }
 
}