ResourceServerConfig.java 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package com.yihu.base.security.config;
  2. import com.yihu.base.security.properties.SecurityProperties;
  3. import com.yihu.base.security.rbas.provider.AuthorizeConfigProviderManager;
  4. import com.yihu.base.security.sms.SmsCodeAuthenticationSecurityConfig;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.autoconfigure.security.oauth2.OAuth2AutoConfiguration;
  7. import org.springframework.context.ApplicationContext;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import org.springframework.context.annotation.Primary;
  11. import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
  12. import org.springframework.security.config.annotation.web.builders.HttpSecurity;
  13. import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
  14. import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
  15. import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
  16. import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationManager;
  17. import org.springframework.security.oauth2.provider.expression.OAuth2MethodSecurityExpressionHandler;
  18. import org.springframework.security.oauth2.provider.expression.OAuth2WebSecurityExpressionHandler;
  19. import org.springframework.security.oauth2.provider.token.TokenStore;
  20. import org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler;
  21. import org.springframework.security.web.authentication.AuthenticationFailureHandler;
  22. import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
  23. /**
  24. * Created by chenweida on 2017/12/4.
  25. */
  26. @Configuration
  27. @EnableResourceServer //开启资源服务器
  28. public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
  29. @Autowired
  30. protected AuthenticationSuccessHandler authenticationSuccessHandler;
  31. @Autowired
  32. protected AuthenticationFailureHandler authenticationFailureHandler;
  33. @Autowired
  34. private OAuth2AuthenticationManager authenticationManager;
  35. @Autowired
  36. private TokenStore redisTokenStore;
  37. @Autowired
  38. private SmsCodeAuthenticationSecurityConfig smsCodeAuthenticationSecurityConfig;
  39. @Autowired
  40. private AuthorizeConfigProviderManager authorizeConfigProviderManager;
  41. @Autowired
  42. private OAuth2WebSecurityExpressionHandler oAuth2WebSecurityExpressionHandler;
  43. @Override
  44. public void configure(HttpSecurity http) throws Exception {
  45. http
  46. .csrf().disable()
  47. .formLogin()//设置验证码 账号密码登陆
  48. .loginPage(SecurityProperties.formLoginPage)
  49. .loginProcessingUrl(SecurityProperties.formLogin)
  50. .successHandler(authenticationSuccessHandler)
  51. .failureHandler(authenticationFailureHandler)
  52. .and()
  53. .apply(smsCodeAuthenticationSecurityConfig) //添加自定义短信登陆;
  54. ;
  55. //验证路径
  56. authorizeConfigProviderManager.config(http.authorizeRequests());
  57. }
  58. @Override
  59. public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
  60. resources.
  61. authenticationManager(authenticationManager)
  62. .tokenStore(redisTokenStore)
  63. .expressionHandler(oAuth2WebSecurityExpressionHandler);
  64. }
  65. /**
  66. * 解决bug
  67. * Failed to evaluate expression '#oauth2.throwOnError
  68. * No bean resolver registered in the context to resolve access to bean
  69. * @param applicationContext
  70. * @return
  71. */
  72. @Bean
  73. @Primary
  74. public OAuth2WebSecurityExpressionHandler oAuth2WebSecurityExpressionHandler(ApplicationContext applicationContext) {
  75. OAuth2WebSecurityExpressionHandler expressionHandler = new OAuth2WebSecurityExpressionHandler();
  76. expressionHandler.setApplicationContext(applicationContext);
  77. return expressionHandler;
  78. }
  79. }