使用Spring Security 限制URL访问

使用Spring Security 限制URL访问

通常保护url方式有以下几种:

  • 允许每个人访问的url
  • 基于角色保护url
  • 基于多个角色保护url
  • 基于IP地址保护url

本文介绍如何通过spring security 实现这些功能。

指定URL

指定url最常用的方法是通过antMatcher,如果我们想保护下列url:

url访问限制
http://www.example.com/static给所有人开放,如css, javascript
http://www.example.com/register给所有人开放
http://www.example.com/login给所有人开放
http://www.example.com/user/ROLE_USER 和 ROLE_ADMIN 开放,如用户profile
http://www.example.com/admin/仅ROLE_ADMIN ,并且限制ip地址,如:管理员界面

可以简单使用:

.antMatchers("/register")
  •  

或指定多个:

.antMatchers("/register","/login","/user","/admin")
  •  

也可以指定单个页面或目录:

.antMatchers("register.html"); // Individual
.antMatchers("/admin/**"); // Directory

保护URL

保护URL常用的方法有:

  • authenticated()
    保护UrL,需要用户登录
  • permitAll()
    指定URL无需保护,一般应用与静态资源文件
  • hasRole(String role)
    限制单个角色访问,角色将被增加 “ROLE_” .所以”ADMIN” 将和 “ROLE_ADMIN”进行比较. 另一个方法是hasAuthority(String authority)
  • hasAnyRole(String… roles)
    允许多个角色访问. 另一个方法是hasAnyAuthority(String… authorities)

其他有用的方法有:

  • access(String attribute)
    该方法使用 SPEL, 所以可以创建复杂的限制.
  • hasIpAddress(String ipaddressExpression)
    限制IP地址或子网

一起实现上述需求

实现代码如下:

@Override
protected void configure(HttpSecurity http) throws Exception {
  http
    .authorizeRequests()
       .antMatchers("/static","/register").permitAll()
       .antMatchers("/user/**").hasRoles("USER", "ADMIN") // can pass multiple roles
       .antMatchers("/admin/**").access("hasRole('ADMIN') and hasIpAddress('123.123.123.123')") // pass SPEL using access method
       .anyRequest().authenticated()
       .and()
   .formLogin()
       .loginUrl("/login")
       .permitAll();
}

关键点说明:

permitAll 允许所有人访问文件或目录
hasRoles 传递多个角色
access 用于复杂的访问限制

总结

本文通过示例说明spring security限制url访问的几种方法,可以利用多种不同组合实现现实需求。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值