Spring Cloud Oauth2 搭建资源服务 简化版本不复杂

导读:本篇文章讲解 Spring Cloud Oauth2 搭建资源服务 简化版本不复杂,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1,创建springboot项目

2,在pom文件中加入关于oauth2的依赖

<!-- oauth2 资源服务 -->
<dependency>
    <groupId>org.springframework.security.oauth</groupId>
    <artifactId>spring-security-oauth2</artifactId>
    <version>2.3.0.RELEASE</version>
</dependency>

3,配置资源服务


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
import org.springframework.security.oauth2.provider.token.RemoteTokenServices;
import org.springframework.security.oauth2.provider.token.ResourceServerTokenServices;

/**
 * oauth2 资源服务配置
 *
 * @author lixx
 * @version 1.0
 * @date 2020-05-18 16:36
 */
@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {

	public static final String RESOURCE_ID = "res1";

	@Override
	public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
		resources
				// 资源服务id
				.resourceId(RESOURCE_ID)
				// 验证令牌的服务
				.tokenServices(tokenServices())
				.stateless(true);
	}

	@Override
	public void configure(HttpSecurity http) throws Exception {
		http
				.authorizeRequests()
				.antMatchers("/**")
				.access("#oauth2.hasScope('all')")
				.and().csrf().disable()
				// 基于token的方式, 关闭session
				.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

	}

	@Bean
	public ResourceServerTokenServices tokenServices() {
		RemoteTokenServices services = new RemoteTokenServices();
		// 校验令牌合法性的地址
		services.setCheckTokenEndpointUrl("http://localhost:8900/oauth/check_token");
		// 客户端id
		services.setClientId("c1");
		// 客户端密钥
		services.setClientSecret("secret");
		return services;
	}
}

4,配置权限

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

/**
 * @author lixx
 * @version 1.0
 * @date 2020-05-18 14:19
 */
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

	/**
	 * 安全拦截机制
	 */
	@Override
	protected void configure(HttpSecurity http) throws Exception {
		http.csrf().disable()
				.authorizeRequests()
				// web拦截的方式
//                .antMatchers("/r/r1").hasAuthority("p2")
//                .antMatchers("/r/r2").hasAuthority("p2")
				.antMatchers("/r/**").authenticated()//所有/r/**的请求必须认证通过
				.anyRequest().permitAll()//除了/r/**,其它的请求可以访问
		;


	}
}

5,创建资源服务url

@GetMapping("/r1")
// 方法拦截的方式
@PreAuthorize("hasAuthority('p1')")
public String r1() {
    return "访问资源1";
}

6,访问资源

Spring Cloud Oauth2 搭建资源服务 简化版本不复杂

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/72560.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!