博客
关于我
Spring Security Core Plugin - 5. 配置到安全URL的请求映射
阅读量:799 次
发布时间:2023-03-31

本文共 2426 字,大约阅读时间需要 8 分钟。

保护URL访问的多种方式

在Grails应用中,保护URL访问可以通过多种方式实现,每种方式都有其特点和适用场景。以下是几种常见的配置方式,以及如何将访问者的URL与安全控制映射起来。

1. 悲观锁定模式

对于大多数应用,公共访问权限是默认的,只有部分页面需要不同的认证权限。在这种情况下,可以通过悲观锁定模式来拒绝所有未明确配置的URL访问。这种模式的核心思想是:如果一个URL没有被明确配置规则,它将被拒绝访问。

要启用悲观锁定模式,只需在grails-app/conf/Config.groovy文件中添加以下配置:

grails.plugins.springsecurity.rejectIfNoRule = true

这样,所有未设定规则的URL都会被拒绝访问。

2. URL与认证的关系

无论采用哪种方式,你都需要配置一个映射,控制哪些URL可以被哪些角色访问。例如,/admin/user/**可能需要ROLE_ADMIN权限。以下是一些常用的标志:

  • IS_AUTHENTICATED_ANONYMOUSLY:表示任何用户(包括匿名用户)都可以访问。
  • IS_AUTHENTICATED_REMEMBERED:表示用户已登录并选择了“记住我”功能。
  • IS_AUTHENTICATED_FULLY:表示用户已完成完整的登录验证。

通过这些标志,你可以灵活地控制URL的访问权限。例如:

/grails/plugins/springsecurity/interceptUrlMap = [
'/admin/user/**': ['ROLE_ADMIN'],
'/finance/**': ['ROLE_FINANCE', 'IS_AUTHENTICATED_FULLY'],
'/js/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
'/css/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
'/images/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
'/*': ['IS_AUTHENTICATED_ANONYMOUSLY'],
'/login/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
'/logout/**': ['IS_AUTHENTICATED_ANONYMOUSLY']
]

3. 配置方式的比较

  • 注解方式:通过在控制器中使用@Secured注解来定义规则。这种方式适合需要频繁修改规则的场景,但需要重新启动应用才能生效。
  • Config.groovy文件:在配置文件中定义URL规则,适合需要静态规则的场景,修改后需要重新启动应用。
  • Requestmap:将规则存储在数据库中,支持动态修改和删除,缓存机制会影响性能。

4. 定义安全控制注解

在控制器中使用注解来定义安全规则。例如:

@Secured(['ROLE_ADMIN'])
class SecureController {
def index() { ... }
}

类级别和动作级别的注解都可以使用,动作级别的注解优先于类级别的注解。

5. 静态映射规则

Config.groovy中定义静态映射规则:

grails.plugins.springsecurity.controllerAnnotations.staticRules = [
'/js/admin/**': ['ROLE_ADMIN'],
'/someplugin/**': ['ROLE_ADMIN']
]

这种方式适合不需要修改插件代码的场景。

6. 使用表达式定义规则

Spring Security支持使用表达式来定义更复杂的规则。例如:

@Secured(["hasRole('ROLE_ADMIN')"])
def someAction() { ... }

这种方式允许你在规则中使用更灵活的条件。

7. Requestmap的缓存

Requestmap规则项会被缓存,为了确保配置的灵活性,需要定期刷新缓存。例如:

def save = {
def requestmapInstance = new Requestmap(params)
if (!requestmapInstance.save(flush: true)) {
render view: 'create', model: [requestmapInstance: requestmapInstance]
return
}
springSecurityService.clearCachedRequestmaps()
flash.message = "${message(code: 'default.created.message', args: [message(code: 'requestmap.label', default: 'Requestmap'), requestmapInstance.id])}"
redirect action: show, id: requestmapInstance.id
}

8. 使用表达式创建细粒度规则

通过结合表达式,你可以创建更精细的访问规则。例如:

new Requestmap(url: '/secure/someAction', configAttribute: "hasRole('ROLE_ADMIN')").save()

这种方式允许你在规则中使用复杂的逻辑条件。

通过以上方法,你可以根据实际需求选择最适合的配置方式,将访问者的URL与安全控制映射起来。

转载地址:http://dpefk.baihongyu.com/

你可能感兴趣的文章
Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
查看>>
Openlayers高级交互(17/20):通过坐标显示多边形,计算出最大幅宽
查看>>
Openlayers高级交互(19/20): 地图上点击某处,列表中显示对应位置
查看>>
Openlayers高级交互(8/20):选取feature,平移feature
查看>>
openlayers:圆孔相机根据卫星经度、纬度、高度、半径比例推算绘制地面的拍摄的区域
查看>>
OpenLDAP(2.4.3x)服务器搭建及配置说明
查看>>
OpenLDAP编译安装及配置
查看>>
OpenMCU(一):STM32F407 FreeRTOS移植
查看>>
OpenMCU(三):STM32F103 FreeRTOS移植
查看>>
OpenMCU(二):GD32E23xx FreeRTOS移植
查看>>
OpenMetadata 命令执行漏洞复现(CVE-2024-28255)
查看>>
OpenMMLab | S4模型详解:应对长序列建模的有效方法
查看>>
OpenMMLab | 【全网首发】Llama 3 微调项目实践与教程(XTuner 版)
查看>>
OpenMMLab | 面向多样应用需求,书生·浦语2.5开源超轻量、高性能多种参数版本
查看>>
OpenMV入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
查看>>
OpenObserve云原生可观测平台本地Docker部署与远程访问实战教程
查看>>
OpenPPL PPQ量化(4):计算图的切分和调度 源码剖析
查看>>
OpenPPL PPQ量化(5):执行引擎 源码剖析
查看>>
openpyxl 模块的使用
查看>>
Openresty框架入门详解
查看>>