使用 Spring Security 时如何允许 CKEditor 在 Grails 中上传图像

Posted

技术标签:

【中文标题】使用 Spring Security 时如何允许 CKEditor 在 Grails 中上传图像【英文标题】:How to Allow CKEditor upload images in Grails when using Spring Security 【发布时间】:2015-08-08 20:38:19 【问题描述】:

我有一个使用 Spring Security 插件的 Grails 应用程序,并且使用 grails.plugin.springsecurity.controllerAnnotations.staticRules 来制定安全规则。

应用程序的一部分是一个基本知识库,只有标题和详细信息。详细信息部分使用 CKEditor 插件,该插件适用于文本、链接和一般格式没有问题,但我无法让图像上传和浏览功能正常工作。我收到“抱歉,您无权查看此页面。”每当我尝试上传或浏览服务器以查找图像时。

我将上传目录设置为默认 /uploads/,我的 CKEditor 配置如下所示:

ckeditor 
  config = "/js/myckconfig.js"
  skipAllowedItemsCheck = false
  defaultFileBrowser = "ofm"
  upload 
    basedir = "/uploads/"
          overwrite = false
          link 
              browser = true
              upload = true
              allowed = []
              denied = ['html', 'htm', 'php', 'php2', 'php3', 'php4', 'php5',
                        'phtml', 'pwml', 'inc', 'asp', 'aspx', 'ascx', 'jsp',
                        'cfm', 'cfc', 'pl', 'bat', 'exe', 'com', 'dll', 'vbs', 'js', 'reg',
                        'cgi', 'htaccess', 'asis', 'sh', 'shtml', 'shtm', 'phtm']
          
          image 
              browser = true
              upload = true
              allowed = ['jpg', 'gif', 'jpeg', 'png']
              denied = []
          
          flash 
              browser = false
              upload = false
              allowed = ['swf']
              denied = []
          
  

我假设是 Spring Security 阻止了访问,所以我尝试将 /uploads/ 目录添加到 Config.groovy 中的静态规则中,以便该部分看起来像这样

grails.plugin.springsecurity.controllerAnnotations.staticRules = [
  '/':                              ['permitAll'],
  '/index':                         ['permitAll'],
  '/index.gsp':                     ['permitAll'],
  '/assets/**':                     ['permitAll'],
  '/**/js/**':                      ['permitAll'],
  '/**/css/**':                     ['permitAll'],
  '/**/images/**':                  ['permitAll'],
  '/**/favicon.ico':                ['permitAll'],
  '/**/jasper/**':                  ['permitAll'],
  '/jasper/**':                     ['permitAll'],
  '/**/uploads/**':                  ['permitAll'],
  '**/ck/ofm/filemanager/**':       ['permitAll'],
  '**/ck/ofm/filetree/**':          ['permitAll'],
  '/**/reports/**':                 ['permitAll']

]

我已经尝试了所有我能想到的 /uploads/ 和 /**/uploads/ 的变体。

我无法通过 url 直接访问上传目录或其中的测试图像,但是当我为 /images/ 目录执行此操作时可以。出于这个原因,我尝试将上传目录设置为 /images/ 目录,但我仍然得到相同的访问被拒绝。

我已经搜索了答案,我看到的最接近的帖子是this one,但这与我的问题不同,没有给出解决方案。

【问题讨论】:

你搞定了吗? 【参考方案1】:

我遇到了同样的问题。尝试将此网址添加到您的列表中:

'/ck/**': ['permitAll']

(实际上我不建议允许完全访问此 url,除非您希望任何人都能够访问 CKEditor 功能)。

【讨论】:

【参考方案2】:

我认为这是您尝试上传图片时发出的发布请求的问题。

ofm.gsp 中的 configUrl 将 type 和 viewMode 传递为 null,因为该文件没有上传到相应的文件夹..

configUrl="/YourApp/ck/ofm/config?fileConnector=/YourApp/ck/ofm/filemanager&type=Image&viewMode=grid";

【讨论】:

以上是关于使用 Spring Security 时如何允许 CKEditor 在 Grails 中上传图像的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security with Spring Boot:使用过滤器时允许未经身份验证的用户访问特定端点

如何允许使用 Spring Security 访问特定的 React 哈希路由?

Grails Spring Security:如何允许密码为空?

Spring Security Jwt 令牌在请求表单角度时允许所有选项方法

Spring Boot + Security:设置允许的来源时没有 Access-Control-Allow-Origin 标头

如何通过我的基本身份验证配置允许“/api/**”进入我在 Spring Security 中的 oauth 配置