Spring Security + OAuth2.0第三天 HttpSecurity的几个重要参数说明

6 篇文章 2 订阅
5 篇文章 1 订阅

HttpSecurity全名为org.springframework.security.config.annotation.web.builders.HttpSecurity

这个类是Spring Security中继承WebSecurityConfigurerAdapter时需要复写的接口中的一个重要参数,用于配置Security重要的拦截及权限控制。这方法在父类中保护方法。

同时这个类也是OAuth2.0中资源服务继承ResourceServerConfigurerAdapter时,需要复写的接口中的一个重要参数。也是用于配置Security的重要拦截及权限。因此当我们使用Security及OAuth2.0时会有配置重复的问题。这点需要注意。这个方法在父类中属于公开方法。

HttpSecurity 重要方法:

requestMatchers()

取得RequestMatcherConfigurer对象并配置允许过滤的路由;如requestMatchers().anyRequest()等同于http.authorizeRequests().anyRequest().access("permitAll");如下面两个例子:

	@Override
	public void configure(HttpSecurity http) throws Exception {
		
//只允许路由由test开头的需要进行权限认证,其他的接口不需要权限认证;requestMatchers().anyRequest()即所有接口可以不进行认证;	
	http.requestMatchers().anyRequest().and().authorizeRequests().antMatchers("/test/*").authenticated();

	}
	@Override
	public void configure(HttpSecurity http) throws Exception {
		//只有以/test 开头的路由需要进行权限认证;其他路由不需要权限认证
		http.requestMatchers().antMatchers("/test/**").and().authorizeRequests().antMatchers("/**").authenticated();

	}

上面两个例子中可以看出:http.requestMatchers().anyRequest().and().authorizeRequests().antMatchers("/test/**").authenticated();配置和http.requestMatchers().antMatchers("/test/**").and().authorizeRequests().antMatchers("/**").authenticated();配置后的效果是完全一样的。

authorizeRequests()

授权管理控制的方法,这个方法返回一个ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry对象。Security所有的权限控制都基于这个类进行控制。如:http.authorizeRequests().anyRequest().authenticated();要求所有接口都需要进行权限认证,这个类中的anyRequest()即所有接口,等同于http.authorizeRequests().antMatchers("/**").authenticated();  而其中的authenticated()则要求必须进行权限认证。而http.authorizeRequests().antMatchers("/**").permitAll();这个配置中permitAll方法则要求所有接口都不需要进行权限认证。另外这两个代码中antMatchers方法则是配置匹配规则。即哪些接口需要进行权限认证或不需要进行权限认证。

		//所有接口都不需要权限认证
		http.authorizeRequests().antMatchers("/**").permitAll();
		//所有接口都要进行权限认证
		http.authorizeRequests().antMatchers("/**").authenticated();
		//只有以test开头的接口需要进行权限认证
		http.authorizeRequests().antMatchers("/test/**").authenticated();

http.authorizeRequests().antMatchers("/test/**").hasRole("user").antMatchers("/**").authenticated();在这个代码中要求以/test开头的路由需要进行角色认证(这里要求user角色),而其他接口只要登录即可访问。当我们需要配置多个角色时可以通过hasAnyRole方法配置多个角色的访问权限,如

http.authorizeRequests().antMatchers("/test/**").hasAnyRole("user","admin").antMatchers("/**").authenticated();

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值