spring security 5 (2)-Http请求权限

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangb_java/article/details/86571034

用户访问网站时,只能请求其有权限的网址,而不能手动去请求其权限以外的网址。

基本配置

以下配置了3个url请求时各需要的角色或权限,注意,这并不代表现实业务中的角色和权限,你可以根据需要自己决定。

	public void configure(HttpSecurity http) throws Exception  {
		http
			.authorizeRequests() //进行权限配置
        		    .antMatchers("/anonymous1").hasAnyRole("ANONYMOUS")//角色ANONYMOUS   			        
        		    .antMatchers("/anonymous2").hasAnyAuthority("ROLE_ANONYMOUS")//权限ROLE_ANONYMOUS
        		    .antMatchers("/anonymous3").anonymous()//匿名用户
        		    .anyRequest().authenticated()//以上未配置的其他url,需要登录才能访问	
        		    .and()    
			.formLogin().and()        //开启formLogin便于测试
			.csrf().disable(); 

匿名用户

spring security中有匿名用户的概念,即你没有登录,仍然会给你分配匿名权限:ROLE_ANONYMOUS。而带ROLE_前缀的权限 ROLE_xxx 等同于角色 xxx ,所以上面三个/anonymous的访问权限是一模一样的,不需要登录可匿名访问。相反,登录以后就不再拥有匿名权限,将无法再访问这三个url。但是其他url必须登录以后才能访问。

常用的权限配置方法

  • hasAnyRole:用户拥有方法参数中任意一个角色,如上代码中就是。
  • hasAnyAuthority:用户拥有方法参数中任意一个权限。
  • authenticated:登录用户。
  • anonymous:匿名用户。
  • permitAll:任何人都能请求。
  • denyAll:任何人不能请求。
  • rememberMe:使用记住我方式登录的用户可以请求,以后会讲。
  • fullyAuthenticated:使用记住我方式登录的用户不可请求。
  • hasIpAddress:指定ip地址的用户。
  • not:求反,可用于其他方法的前缀。如.not().hasAnyRole("ANONYMOUS")指没有ANONYMOUS角色的用户。
  • access:使用SpEL表达式,如下

SpEL表达式

以上方法一次只能配置一种,如果一个url要同时匹配多种方法,可使用SpEL表达式,如下,用户同时具备role角色和auth权限。

.antMatchers("/any").access("hasAnyRole('role') and hasAnyAuthority('auth')")
  • and和or:逻辑与和逻辑或。
  • hasAnyRole(xxx):拥有xxx中的一个角色。
  • hasAnyAuthority(xxx):拥有xxx中的一个权限。
  • isAuthenticated():登录用户。
  • isAnonymous():匿名用户。
  • permitAll:任意用户。
  • denyAll:拒绝请求。
  • isRememberMe():记住我登录。
  • isFullyAuthenticated():非记住我登录。
  • hasIpAddress(xxx):限制ip。
  • !:求反。
  • 含对象的表达示,如下:只有用户名user可以请求。authentication对象是非常重要的核心对象,以后详解
		.antMatchers("/any").access("authentication.name=='user'")

静态资源

spring security默认会拦截任何请求,以下方法可以排除静态资源。

	public void configure(WebSecurity web) throws Exception {
		web.ignoring().antMatchers("/**.html","/**.js");
	}

猜你喜欢

转载自blog.csdn.net/wangb_java/article/details/86571034
今日推荐