springboot+Oauth2实现自定义AuthenticationManager和认证path

 更新时间:2017年09月06日 09:51:39   作者:huhanguang89  
本篇文章主要介绍了springboot+Oauth2实现自定义AuthenticationManager和认证path,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本人在工作中需要构建这么一个后台框架,基于springboot,登录时认证使用自定义AuthenticationManager;同时支持Oauth2访问指定API接口,认证时的AuthenticationManager和登录规则不同。在研究了源码的基础上参考很多文章,目前基本得以解决。

@Configuration
public class OAuth2Configuration {
 


   @SpringBootApplication
   @RestController
   @EnableResourceServer
   @Configuration
   @EnableAuthorizationServer
   protected static class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter implements EnvironmentAware {
 
     private static final String ENV_OAUTH = "authentication.oauth.";
     private static final String PROP_CLIENTID = "clientid";
     private static final String PROP_SECRET = "secret";
     private static final String PROP_TOKEN_VALIDITY_SECONDS = "tokenValidityInSeconds";
 
     private RelaxedPropertyResolver propertyResolver;
 
     @Autowired
     private DataSource dataSource;
 
     @Bean
     public TokenStore tokenStore() {
       return new JdbcTokenStore(dataSource);
     }
 
//     @Autowired
//   @Qualifier("authenticationManagerBean")  
//     private AuthenticationManager authenticationManager;
     
     @Autowired
   @Qualifier("daoAuhthenticationOauthProvider")  
     private AuthenticationProvider daoAuhthenticationOauthProvider;
    
     
  @Override
  public void configure(AuthorizationServerEndpointsConfigurer endpoints)
   throws Exception {
  // @formatter:off
  endpoints
  .tokenStore(tokenStore())
  .authenticationManager(new AuthenticationManager(){
   @Override
   public Authentication authenticate(Authentication authentication) throws AuthenticationException {
   // TODO Auto-generated method stub
   return daoAuhthenticationOauthProvider.authenticate(authentication);
   }
   
  });
  
  // @formatter:on
  }
  
     
     @Override
     public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
       clients
         .inMemory()
         .withClient(propertyResolver.getProperty(PROP_CLIENTID))
         .scopes("read", "write")
         .authorities(Authorities.ROLE_CHANNEL.name())
         .authorizedGrantTypes("password", "refresh_token")
         .secret(propertyResolver.getProperty(PROP_SECRET))
         .accessTokenValiditySeconds(propertyResolver.getProperty(PROP_TOKEN_VALIDITY_SECONDS, Integer.class, 1800));
     }
  
     
     @Override
     public void setEnvironment(Environment environment) {
       this.propertyResolver = new RelaxedPropertyResolver(environment, ENV_OAUTH);
     }
     
     @Configuration
     @EnableResourceServer
     protected static class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
       @Override
       public void configure(HttpSecurity http) throws Exception {
         http
         .antMatcher("/api/dev/**")
         .authorizeRequests()
         .anyRequest()
         .hasRole("DEVELEPOR")
       .and()
         .antMatcher("/api/channel/**")
         .authorizeRequests()
         .anyRequest()
         .hasRole("CHANNEL");
       }
     }

   }

}

以上是Oauth2的主要配置,SecurityConfiguration的配置就不贴了,大家可以去github上找资料,下面是如何自定一个daoAuhthenticationProvider。

@Bean(name="daoAuhthenticationProvider")
public AuthenticationProvider daoAuhthenticationProvider() {
DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();
daoAuthenticationProvider.setUserDetailsService(userDetailsService);
daoAuthenticationProvider.setHideUserNotFoundExceptions(false);
daoAuthenticationProvider.setPasswordEncoder(passwordEncoder);
return daoAuthenticationProvider;
}
@Bean(name="daoAuhthenticationOauthProvider")
public AuthenticationProvider daoAuhthenticationOauthProvider() {
DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();
daoAuthenticationProvider.setUserDetailsService(userDetailsOauthService);
daoAuthenticationProvider.setHideUserNotFoundExceptions(false);
daoAuthenticationProvider.setPasswordEncoder(passwordEncoder);
return daoAuthenticationProvider;
}

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(daoAuhthenticationProvider());
// auth.authenticationProvider(daoAuhthenticationProvider1());
}

@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java连接Redis全过程讲解

    Java连接Redis全过程讲解

    这篇文章主要介绍了Java连接Redis全过程讲解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • springboot+element-ui实现多文件一次上传功能

    springboot+element-ui实现多文件一次上传功能

    这篇文章主要介绍了springboot+element-ui多文件一次上传功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • jenkins+maven+svn自动部署和发布的详细图文教程

    jenkins+maven+svn自动部署和发布的详细图文教程

    Jenkins是一个开源的、可扩展的持续集成、交付、部署的基于web界面的平台。这篇文章主要介绍了jenkins+maven+svn自动部署和发布的详细图文教程,需要的朋友可以参考下
    2020-09-09
  • SpringBoot 拦截器妙用你真的了解吗

    SpringBoot 拦截器妙用你真的了解吗

    关于springboot拦截器很多朋友掌握的不是多好,今天抽空给大家普及下这方面的知识,SpringBoot 拦截器妙用,让你一个人开发整个系统的鉴权模块,快来跟小编一起学习下吧
    2021-07-07
  • Java定义形式及可变参数实例解析

    Java定义形式及可变参数实例解析

    这篇文章主要介绍了Java定义形式及可变参数实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • java文件的简单读写操作方法实例分析

    java文件的简单读写操作方法实例分析

    这篇文章主要介绍了java文件的简单读写操作方法,结合实例形式分析了java文件流进行读写操作的方法与相关操作注意事项,需要的朋友可以参考下
    2020-05-05
  • Java线程的并发工具类实现原理解析

    Java线程的并发工具类实现原理解析

    本文给大家讲解Java线程的并发工具类的一些知识,通过适用场景分析大数据量统计类任务的实现原理和封装,多个示例代码讲解的非常详细,对java线程并发工具类相关知识感兴趣的朋友一起学习下吧
    2021-06-06
  • 超级详细Java JDK环境配置教程(Mac 版)

    超级详细Java JDK环境配置教程(Mac 版)

    这篇文章详细讲解了在MacOS上安装JDK及配置Java环境的步骤,包括下载JDK安装包、安装JDK、查询安装路径以及配置环境变量,旨在为初学者提供一份保姆级的安装指南,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • Spring Boot 多数据源处理事务的思路详解

    Spring Boot 多数据源处理事务的思路详解

    这篇文章主要介绍了Spring Boot 多数据源如何处理事务,本文单纯就是技术探讨,要从实际应用中来说的话,我并不建议这样去玩分布式事务、也不建议这样去玩多数据源,毕竟分布式事务主要还是用在微服务场景下,对Spring Boot 多数据源事务相关知识感兴趣的朋友参考下本文
    2022-06-06
  • 使用JPA传递参数的方法

    使用JPA传递参数的方法

    这篇文章主要介绍了使用JPA传递参数的方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06

最新评论