GATEWiki:用户和开发人员指南
目录
1.简介 2.概述 3.用户信息 3.1.快速入门 3.1.1.文件、目录和链接 3.1.2.创建和编辑页面 3.1.3.删除和复制 3.1.4.上传其他类型的文件 3.1.5.寻找事物 3.1.6.原始HTML页面与wiki页面 3.2.模式 3.3.注册、登录 3.4.创建新的wiki页面或目录 3.5.编辑wiki页面 3.6.搜索 3.7.报告错误 3.8.YAM标记语言 3.8.1.YAM总结 3.8.2.YAM语法和用法 3.8.2.1.简介 3.8.2.2.内容 3.8.2.3.粗体、斜体、下划线和电传打字 3.8.2.4.水平线 3.8.2.5.列表 3.8.2.6.逐字输出 3.8.2.7.脚注 3.8.2.8.逃生 3.8.2.9.标题和元数据 3.8.2.10.标题 3.8.2.11.连杆和锚 3.8.2.12.大宗报价 3.8.2.13.换行符 3.8.2.14.表格 3.8.2.15.图像 3.8.2.16.引文 3.8.2.17.包含 3.8.2.18.无间断空间 3.8.2.19.评论 3.8.2.20.插件 3.8.2.21.版本3的更改 3.9.LaTeX支持 4.开发者和管理员信息 4.1.路线图 4.2.检查代码 4.3.选择模式 4.4.创建新的wiki空间 4.4.1.认证设置 4.4.2.设置wiki再生 4.4.3.设置wiki更新 4.5.建造和测试CoW 4.5.1.关于巡航的更多信息 4.5.2.硒试验 4.5.2.1.Firefox配置文件 4.5.2.2.开发新测试 4.5.3.升级到新的Grails版本 4.5.4.使用YAM测试 4.5.5.Grails/Spring/JSecurity和上传功能 4.6.颠覆版本 4.7.配置CoW 4.7.1.服务robots.txt 4.8.CoW的数据区 4.8.1.SVN配置目录 4.9.部署和运行CoW 4.9.1.启动和停止 4.9.2..cowrc.d目录的可移植性 4.9.3.Apache 2虚拟主机和CoW代理 4.9.4.生产部署和升级 4.9.5.部署和运行时依赖性 4.9.5.1.节省空间 4.10.结构、命名和代码惯例 4.10.1.命名和其他代码约定 4.10.2.结构 4.10.2.1.主要类和Grails对象 4.11.认证和授权 4.11.1.Grails JSecurity插件 4.11.2.Grails JCaptcha插件 4.11.3.用户、角色、权限、操作 4.11.3.1.目录级授权 4.11.3.2.通过CowPermission控制访问非页面控制器 4.11.3.3.用户和密码约束 4.11.3.4.工作站和服务器模式下的安全 4.11.4.预定义安全对象 4.11.5.标签库 4.11.6.Jsecurity和GATE Wiki之间的代码依赖性 4.11.7.已知漏洞及其避免 4.12.特定于站点和Wiki的布局和导航 4.12.1.导航 4.12.2.更换主页布局 4.12.3.更改标题或徽标 4.12.4.处理非本地HTML页面 4.13.引用和再生 4.13.1.序列化 4.13.2.再生 4.13.3.SVN运行速度状态 4.14.Sourceforge注释 4.15.Grails MVC注释 4.16.IntelliJ注释 4.17.搜索基础设施 4.17.1.安装 4.17.1.1.目录结构 4.17.1.2.启用Solr 4.17.2.从CoW索引wikis/单个文件 4.17.2.1.索引单个Wiki区域 4.17.2.2.索引单个文件 4.17.3.测试 4.17.4.调试 4.18.SVN浏览 4.18.1.CoW中Sventon的注释 4.19.使用插件扩展YAM
1 介绍
2 概述
在运行基于浏览器的编辑器的每个页面上都有一个编辑链接 允许使用少量 格式约定(例如。 * 大胆的 * ) 通过将不存在页面的链接定向到,支持创建页面 创建页面 允许多个用户同时使用系统(有时 同时编辑同一文档)
它从头开始设计,支持并行编辑和离线 使用SVN进行直接同步 1 它使用 YAM语言 ,其中 输出LaTeX和HTML 允许将路径作为链接(即不将命名空间限制为单个 目录,如JSPWiki),因此允许 树结构页面存储(以及稍后通过 本体)
它允许在页面存储中混合所有类型的文件(这只是一个 事实上,SVN沙盒) 它支持通过SVN进行版本控制和差异化,并允许其他工具 操纵SVN存储库以与wiki数据一起使用(例如Tortoise、, Eclipse、ViewVC等) 它支持嵌入式CLOnE(用于肿瘤编辑的受控语言),以及 因此,GATE团队对存储 模式由用户定义和维护的语义存储库中的数据
离线编辑-只需签出页面并编辑到您心中的内容 脱机时 使用其他工具进行编辑,而不仅仅是使用web界面 管理与作者身份相关的元数据,例如添加了多少行, 版本之间的差异等等 一个稳定可靠的版本控制系统,已在生产中得到验证 百万开发人员使用 无锁定的并发编辑
数据库被知识库取代(使用 奥利姆 ) 知识库是使用CLOnE定义和填充的 在CVS或SVN中管理并发更改(签出、编辑、更新、, 合并等)
3 用户信息
3.1. 快速入门
3.1.1. 文件、目录和链接
3.1.2. 创建和编辑页面
您正在阅读的URL,例如在URL中 http://gate.ac.uk/gatewiki/cow/doc/gatewiki.html 目录是 gatewiki/奶牛/医生 顶栏中的面包屑列表(从“Home”开始,工作 到您当前的位置,例如。 首页>gatewiki>cow>文档
3.1.3. 删除和复制
3.1.4. 上传其他类型的文件
3.1.5. 寻找事物
3.1.6. 原始HTML页面与wiki页面
一 .html格式 当web浏览器遵循链接时将提供给它们的文件 到页面 一 .山药 包含源文本的文件,在 YAM格式
3.2. 模式
工作站模式 ,它在个人计算机上运行并在文件外工作 计算机用户也在使用的树。 在此模式下CoW 允许您编辑已经存在的文件,并执行subversion“add” 创建新文件时的操作,但确实 不 将更改提交到 存储库。 您必须使用subversion命令自己提交更改 线条工具。 服务器模式 ,它管理通常不受 通过其他流程进行更改。 在这种模式下,CoW假定其具有完全控制权 通过沙盒目录,直接提交编辑和新页面 到subversion服务器。
3.3. 注册,登录
3.4. 创建新的wiki页面或目录
编辑现有页面并向不存在的wiki页面添加相对链接 (wiki会将其链接到“创建新页面”工具) 使用目录列表中的“新页面”链接 在wiki管理的SVN沙盒下创建新文件(CoW随后将 通过定期更新拉入)
css公司 js型 千兆瓦 _ 图像 插件 网络信息 第8组
3.5. 编辑wiki页面
所见即所得编辑器(FCK编辑) web表单页面
3.6. 搜索
文件的标题 指向文档的链接 突出显示匹配术语的文本片段
3.7. 报告错误
3.8. YAM标记语言
3.8.1。 YAM总结
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
3.8.2. YAM语法和用法
3.8.2.1. 介绍
3.8.2.2. 目录
3.8.2.3. 粗体、斜体、下划线和电传打字
3.8.2.4. 水平线
---
---------------------------
3.8.2.5. 列表
-这是一个无序列表 -第二项 #这是一个嵌套的。。。 # ... 有序列表 -返回附件列表的第三项
这是一个无序列表 第二项 这是一个嵌套的。。。 …排序列表
返回附件列表的第三项
-这是一个单件清单 然后 -另一个单件清单。
这是一个单件清单
另一个单件清单。
3.8.2.6. 逐字输出
%代码(lang=Java)< 公共void hello(){ System.out.println(“你好,世界”); } %>
公共void hello(){ System.out.println(“hello world”); }
3.8.2.7. 脚注
%脚注(这是一个脚注。)
3.8.2.8. 逃跑
\---
3.8.2.9. 标题和元数据
<meta name=“foo”content=“bar”>
3.8.2.10. 标题
%1标题
%1*未编号标题
未编号的标题
3.8.2.11. 连杆和锚
作为纯文本,例如“ 小时 网址:http://gate.ac.uk/ ' 将成为 网址:http://gate.ac.uk/ 使用“ % (目标) ',例如。 % ( 小时 网址:http://gate.ac.uk/ ) 将成为 网址:http://gate.ac.uk/ 使用“ % (目标,标签) ',例如。 % ( 小时 网址:http://gate.ac.uk/ ,GATE主页) 将成为 GATE主页
%1 A标题%#标签
%(#个表,个表)
%(../non-istant.html)
%(index.html)
3.8.2.12。 大宗报价单
%“这是报价%”
这是一个报价
%" -列表 %"
%" -列表 %”
列表
3.8.2.13. 换行符
这条线被打断了%br。
3.8.2.14. 桌子
%[ |*标题列1*|*标题列2*| --- |第1行第1列第2列 --- |第2行第1列|第2列| %]
| |
3.8.2.15. 图像
' % 图像(test-image.png) '将成为 ' % 图像(test-image.png,测试图像) '将成为 (文本成为图像的“alt”属性)
3.8.2.16. 引文
3.8.2.17. 包含
%包括(yam-first.yam)
3.8.2.18。 非破坏性空间
此行%\%\%\中间有空格。
3.8.2.19. 评论
这不是评论%%,但这是
这不是评论%/*,但这是 而且这个比例太高了*/
第3.8.2.20条。 插件
推特。 将Twitter更新列表添加到页面。 示例用法: % twitterWidget(帐户=GateAcUk,widget-id= 你的ID在这里 ,宽度=300,高度=450) 谷歌。 添加谷歌网站搜索框。 示例用法: % 谷歌(siteip=gate.ac.uk)
3.8.2.21. 版本3的更改
补充 插件 水平线现在是三条或更多的短划线 注释语法: % % 对于单行,以及% / * …% * /对于多行 在表行的开头和结尾添加列分隔条 标题中允许有多行 添加下划线 再也没有了 % 输出函数 将引号语法更改为 % " 将换行符样式更改为 % br个 逐字输出是 % < ... % > 目标语言控制字符(如<或&)现在处理正确 标题可以不编号,例如“ % 2 * " 编号列表的前缀现在是“#”而不是“o” 添加了非中断空格 各种错误修复 更改了固定宽度,从等于=…= 至克拉 ^ ... ^ 添加了插件
3.9. LaTeX支持
并非LaTeX中的所有内容都对应于YAM中的构造,反之亦然。 这个过程并不完美。 每个 .山药 文件将被转换为独立文件 .tex码 准备好了 编译。 假设书目文件 围兜.bib 和 bibstyle.bst 存在。 在image指令中,宽度和高度值被二除为 将像素转换为点的粗略近似。
4 面向开发人员和管理员的信息
带有JavaCC解析器的wiki语言 使用Subversion的CMS持久性和版本控制后端 使用简单显示和编辑wiki页面和其他静态内容 Grails公司 Grails JSecurity插件的一个版本,包括编辑 的用户数据,并为wiki区域和目录分配权限 使用JCaptcha插件进行用户注册 网络测试使用 硒 一个最小的高超音速数据库,用于存储指向wiki区域和 用户/角色/权限数据)
4.1. 路线图
4.2. 检查代码
4.3. 选择模式
-Dgate.cow.mode=工作站 -Dgate.cow.mode=服务器
4.4. 创建新的wiki空间
浏览现有SVN沙盒 让wiki为您创建一个新的沙箱
区域1。 是帮助区域,由提供服务 /帮助 URL 区域2。 是主要区域,由所有其他区域提供服务 / URL
4.4.1. 身份验证设置
用户名 如果指定,与服务器的所有交互都将使用此 用户名和所有subversion提交都将使用此名称作为其作者。 如果 未指定,将使用当前登录到CoW的用户名。 密码 用于向进行身份验证的密码 网址: 和 https(https): 请求一个存储库,以及SSH服务器(用于 svn+ssh: ) 除非还提供了私钥(见下文)。 SSH特定选项: 端口号 连接到SSH服务器的端口号。 这个 默认为端口22,在大多数情况下都可以使用。 私钥 如果SSH服务器使用公钥/私钥进行身份验证 然后您应该指定私钥(及其关联的 密码短语)。 密钥文件应为标准OpenSSH格式。 公钥放在 经授权的 _ 钥匙 服务器上的文件。
HTTP/HTTPS特定选项 客户端证书 如果HTTPS服务器需要使用客户端SSL 那么您应该在此处指定它(及其关联的 密码短语)。 证书应以PKCS#12格式存储,包括 相应的私钥。 验证服务器证书 我们是否应该验证 HTTPS服务器以通常的方式提供的证书,或者只接受 任何证书。 前者更安全,但后者可能是必要的 如果您的服务器使用自签名证书。 强制身份验证 通常用户名和密码只传递给 如果服务器请求(通过401状态代码)。 此选项导致 它们将在所有请求中通过,而无需等待挑战。 这个 使文件树的某些部分可用的服务器可能需要 匿名和其他部分仅向注册用户提供。
4.4.2. 设置wiki重新生成
4.4.3. 设置wiki更新
设置更新间隔。 wiki工作副本将在此更新 间隔,以分钟为单位。 空值(null)表示wiki工作副本 将永远不会更新。 新wiki的默认值是在wiki中设置的 配置文件,当前为null。 单击wiki管理页面上的更新按钮,立即进行更新。
4.5. 建造和测试CoW
假设/ gwt和/ grails包含GWT和grails(参见属性 在build.xml中定义并根据需要进行更改,或在 build目录中的build.properties文件) 将Grails工作目录放在dot-Grails中(以避免 启动时有多个服务器)
cdgrails&&蚂蚁清洁罐 光盘/ 奶牛和蚂蚁的帮助 ant-cruise(干净构建、战争、单元和集成测试) ant run-dev(确保功能测试有一个填充的用户 家庭环境流失; 在服务器运行后将其杀死) 蚂蚁测试硒(功能测试)
4.5.1. 关于巡航的更多信息
webtest-page:对PageController运行测试; 它的优点是 将针对正在运行的grails实例,因此您可以使用它来运行 例如,在开发或针对生产服务器进行测试时 获取一些计时数据(在生产环境中运行时,需要取消注释 设置webtest.properties中上下文路径的行)
? 必须至少运行一次ant webtest才能在ant之后进行ant运行开发 清洁的 要为java目标生成log4j属性,需要调用ant 战争
4.5.2条。 硒测试
浏览器=*firefox/path/to/your/firefox-bin
cow/dev-user-home/.cowrc.d cow/webtest/user-home/.cowrc.d ~/.cowrc.d ~/.大杯
4.5.2.1. Firefox配置文件
4.5.2.2. 开发新测试
4.5.3. 升级到新Grails版本
svn-up和ant-clean-jar in grails 检查cow/lib之间的兼容性/ * 和grails/lib/ * (脚本 bin/check-jars.sh可以提供帮助) 如果需要,请更改build.xml以引用新的groovy jar 蚂蚁清洗奶牛 奶牛的蚂蚁升级
4.5.4。 使用YAM测试
针对存储库创建修补程序 最小值 文件: svn diff yam-minimal.html>minimal.patch
将其应用于 不包括 文件: 补丁-o new-no-includes.html yam-minimal-no-includes.html minimal.patch
覆盖工作副本: mv new-no-includes.html yam-minimal-no-includes.html
检查它是否工作: svn diff yam-minimal-no-includes.html
4.5.5. Grails/Spring/JSecurity和上传功能
4.6. Subversion版本
如果将CoW与创建的沙盒一起使用 svn公司 版本1.4或 早些时候,1.4版本将不再使用该沙盒 命令行工具。 如果在沙盒上使用1.6系列命令行工具,则该沙盒不会 CoW更容易阅读。
4.7. 配置CoW
/**此处为外部CoW配置*/ println“加载外部用户配置;在${'pd'.execute().text}中运行” gate.cow.name.short=“cow-开发模式” gate.cow.name.long=“cow-开发模式,可控Wiki” gate.cow.logo=“/g8/page/show/1/doc/larson-small.png” gate.cow.sventon.run=真 gate.cow.solr.run=真
4.7.1. 服务robots.txt
4.8. CoW的数据区
4.8.1. SVN配置目录
4.9. 部署和运行CoW
4.9.1. 启动和停止
CoW执行一些特定于Jetty和Grails的引导和配置工作 斯文顿 要允许SVN存储库浏览,您需要 如果需要此功能,请单独配置Sventon CoW同上 索引和搜索工具 不同的容器有时会触发在 开发人员使用的环境,因此您应该进行一些彻底的测试 在生产部署之前在容器上
4.9.2. .cowrc.d目录的可移植性
告诉SVN您移动了沙盒,例如。 svn开关-重新定位 文件:///home/thomas/.cowrc.d/0.1/svnrep/trunk/help 文件:///data/hamish/nlp-user-home/.cowrc.d/0.1/svnrep/trunk/help
更改数据库中沙盒的路径,例如通过编辑 …/.cowrc.d/dbs/prodDB.script(或使用管理员界面 数据库(如果您没有使用内置的高超音速数据库) 检查您没有复制任何临时区域数据(最好删除它,SVN URL将是错误的)
4.9.3. Apache 2虚拟主机和CoW代理
告诉DNS服务器将各种站点域名解析给服务器 您将继续运行(您可以通过放置以下条目来模拟此操作 127.0.0.1 gate.ac.uk网站 在里面 /等/主机 ) 安装Apache 2: sudo apt-get安装apache2 启用代理: 苏多 a2enmod公司 ,回答“ 代理 “,然后执行相同操作以启用 " 代理 _ http " 注释掉“ 拒绝所有人 “在中 /etc/apache2/mods-enabled/proxy.conf (根据 http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#访问 因为我们 设置 代理请求 到 下车 )
对于每个站点: 输入条目(见下文) /etc/apache2/站点可用 和链接 在站点中连接到它—使用启用 钠长石 ,例如。 vim/etc/apache2/sites-available/gate.ac.uk a2ensite网关.ac.uk
在不同的港口放牛。 ant-Dgate.cow.server.port=8081 运行触头
您现在可以浏览到不同的URL,并从不同的页面获得服务 CoW实例
#gate.ac.uk网站 <虚拟主机*:80> #从debian安装设置的默认站点复制 错误日志/var/log/apache2/error.log 日志级别警告 CustomLog/var/log/apache2/access.log组合 服务器名称gate.ac.uk 服务器别名www.gate.ac.uk ProxyRequests关闭 代理通行证/ http://localhost:8080/ 代理密码反向/ http://localhost:8080/ </VirtualHost>
#APACHE_RUN_USER=www-data APACHERUN_GROUP=www-data/usr/sbin/apache2-S ... 虚拟主机配置: 通配符名称VirtualHosts和_default_服务器: *:80是NameVirtualHost 默认服务器127.0.1.1(/etc/apache2/sites-enabled/000-default:1) 端口80 namevhost 127.0.1.1(/etc/apache2/sites-enabled/000-default:1) 端口80名称host gate.ac.uk(/etc/apache2/sites-enabled/gate.ac.uk:3) 端口80 namevhost gatecloud.net(/etc/apache2/sites-enabled/gatecloud.net:3) 语法正常
RewriteEngine打开 重写规则^/g8/page/show/4(/.*)?$ 我的wiki 1美元[R,L] 重写规则^/my-wiki(/.*)?$/ g8/页面/节目/4$1[PT]
如何处理apache安装中的默认站点? 要禁用它: a2异议违约 注意:始终存在默认虚拟主机(默认或 这是禁用的,是sites-enabled目录中列出的第一个),因此 也许我们还可以启用正常的默认值? DNS不应该 映射任何我们没有明确处理的地址。。。
http://www.debian-administration.org/articles/412 http://www.ducea.com/2006/05/30/managing-apache2-modules-the-debian-way/ http://www.debian-administration.org/tag/apache2
4.9.4. 生产部署和升级
.cowrc.d目录 .cowrc.groovy配置文件 服务器软件(Grails等) GATEWiki软件(包括任何布局插件安装) 从cow-init.sh派生并链接到init的启动脚本。 d日
创建一个在站点名称后调用的目录,例如g8rs.net; cd在那里 将gatewiki代码作为名为 prod服务器 如果需要,安装站点布局插件 链接cow/plugins中的插件并编辑BuildConfig.groovy以添加 对插件的引用( 避免 正在签入BuildConfig! 事实上它 最好不要从prod服务器签入任何内容,也不要 更新)
将脚本cow/bin/cow-init.sh复制到g8rs.net目录并编辑为 适当的,例如: 名称=G8RS.net COW公司 _ HOME=/data/hold/g8rs.net/prod-server/cow COW公司 _ 端口=9090 COW公司 _ MODE=服务器 RUN(运行) _ AS=哈密什语 COW公司 _ 用户 _ HOME=/data/hold/g8rs.net
从/etc/init.d链接cow-init.sh和RC脚本 升级时 将prod-server复制到dev-server并对后者进行svn 将prod db复制到cowrc.d/dbs中的dev db,升级并运行dev服务器, 8080上的测试 用dev-server替换prod-server
运行prod-server 苏多/ co-init.sh[重新]启动 如果需要:更换管理员帐户; 编辑主wiki以指向 其他地方; 创建solr索引; 在 wiki到。 * 或者其他什么
服务器树示例 /数据/牧群/g8rs.net/ /data/harm/g8rs.net/prod-server[在每个。。。 /data/harm/g8rs.net/dev-server。。。 升级] /数据/牧群/g8rs.net/ /data/harm/g8rs.net/cowrc.d(方便链接到.cowrc.d) /data/hold/g8rs.net/cowrc.groovy(方便链接到.cowrc.groovy) /数据/牧群/g8rs.net/main-sandbox /数据/牧群/g8rs.net/cow-init.sh /etc/init.d/cow-init-g8rs-net.sh(链接到cow init.sh)
4.9.5. 部署和运行时依赖项
如何打包CoW站点进行初始部署? 当你想的时候 升级网站的软件你做什么? 如何配置和共享Sventon和Solr等第三方网络应用程序 CoW实例之间?
我们现在使用Grails进行生产部署,因此所有CoW实例 依赖于特定版本的Grails(这样做的一个原因是 我们可以用Grails的 _ 活动.groovy 启动第三方应用程序) 大多数网站将是香草CoW加上一个插件的组合 特定地点的布局等(以我们所做的方式 英国国家职业体育协会 演示 现场) 如果需要,我们应该能够返回到已部署的版本,但是 我们不想将每个部署都完整地存储在svn中 对于一个新的 部署,就好像我们包含了它当前运行到大约半个 GB(网站本身、Nutch、Solr、Grails、GWT……毫无疑问,我们可以做到这一点 下来,但只做了一些工作)
Grails二进制文件(大约是从源代码构建的文件大小的一半 我们当前使用的版本) 奶牛/ * ,可以选择安装特定于站点的插件 斯文顿 ,用于浏览SVN存储库(续wiki区域) 螺母-螺母 ,用于索引和搜索wiki区域
创建新的部署树,包括所有运行时依赖项 更新现有树
特定于站点的布局插件 服务器软件部署版本(以日期表示) 站点名称
复制gatewiki树 在副本中 将cow移动到部署站点的名称(加上日期) 安装布局插件
(可选)标记存储库 (可选)将树复制到部署计算机
将牛树复制到部署站点的名称(加上日期) 安装布局插件 (可选)标记存储库 (可选)将树rsync到部署计算机
4.9.5.1. 节省空间
$du-sh。。。 2.89亿头牛 112M大杯 1.59亿千瓦时 171M螺母 2400万sventon
cow包含大量测试数据(dev-user-home、webtest/user-home.…) 使用精简的GWT,不包括托管模式浏览器(13M) 移动 _ 在其他地方编写事件代码并返回.war进行部署 (但如何处理开发模式?还意味着将代码从 Jetty API,或仅使用Jetty中的war) 清除螺母中约23M的未使用材料 使用apache mod _ 重写以允许跨cow实例共享站点 (问题:单个共享数据库)
4.10. 结构、命名和代码惯例
4.10.1. 命名和其他代码约定
4.10.2. 结构
GATE YAM图书馆,位于GATE.YAM 基于Grails JSecurity插件的JSecuriity实现 GATE版本库(基本上是SVNKit),位于 网关.版本控制 GATE实用程序类,位于GATE.util中 CLoNE和CLoNE-QL,它们位于gate.CLoNE中(当前未发布) CoW Grails网络应用程序
4.10.2.1. 主要类和Grails对象
正常提供静态文件(HTML等) 以正常Wiki方式创建和编辑YAM文件的能力 能够上传文件和目录,并浏览目录树 (当然要经过授权)
域类是对域建模的持久对象 控制器是处理请求并执行相关逻辑的类 动作是控制器上的方法(实际上是闭包),与 不同类型的请求; 动作构建模型,然后传递给 意见 视图是作为 用于演示的参数化HTML
控制器分类请求并使用服务构建模型 转发至视图。 服务封装了业务逻辑和更复杂的模型 操纵。 域类处理持久性并参与模型。 视图处理表示。
Wiki,主域对象 PageController,它处理查看和编辑wiki文件树、YAM文件 等等 AdminController,一个(主要是生成的)控制器,允许创建和 维护wiki区域、人员及其角色等 一组支持JSecurity配置的控制器 各种其他
假设我们有一个wiki区域,用于一个名为 /标识为9的web/gate-server/html。 简单的页面显示URL如下所示 http://localhost:8080/cow/wiki/show/9/ 并将获取任何index.html 存在于那里。 点击相关链接将引导我们进入其他页面 来自CoW应用程序内的文件系统,例如。 http://localhost:8080/cow/wiki/show/9/projects.html 当看到一个HTML文件,其中有一个与之相关的.yam时,一个“编辑 此页面”链接将出现。 查看任何页面时,都会出现“List directory”链接。 始终存在一个“帮助”链接,该链接指向中的CoW文档 用户的 ~/.cowrc.d 目录。
4.11. 认证和授权
以scott身份登录 使用只有您知道的密码创建一个新的管理员用户 然后注销scott 以新用户身份登录 删除斯科特
4.11.1. Grails JSecurity插件
Jsecurity附带了一个基于 分配用户和角色可以访问的控制器和操作。 这个有 已替换为gate.cow.CowPermission,它指定可以执行的操作 在what wiki中的what目录上执行。 请参阅“用户, 角色、权限”。 默认领域JsecDbRealm已被替换为自定义领域 CowDbRealm使用普通数据库身份验证和权限管理, 通过自定义gate.cow.CowPermission 添加了一个SecurityService来执行一些常见任务,例如 创建角色。 Jsecurity插件自动生成的控制器和视图 适用于上述目的。 SecurityFilters已被改编为GATE Wiki jsecurity.messages中的错误消息已定制 已添加标记库:请参阅下文。
4.11.2. Grails JCaptcha插件
按照Config.groovy中的配置,使用了一个简单的随机单词 captcha通过插件提供的jcaptcha:jpeg标记显示 UrlMappings.groovy中提供了captcha图像的特定映射 通过插件提供的JcaptchaService检查响应
4.11.3. 用户、角色、权限、操作
可以访问的wiki(或 * 对于任何wiki) wiki中可以访问的目录,由两个常规 表达式(请参见 在下面 更多细节): 包含的目录 排除的目录
可以访问的控制器。 默认为“页面”控制器 允许访问wiki页面。 控制器 * 表示所有控制器。 可以在控制器上执行的一组操作( 目录(如果是页面控制器)。 集合名为 * 包含 所有操作。
访问wiki某些部分的权限定义为权限 通过管理界面分配给角色和用户。 这些权限是 存储在数据库中。 他们是 分配的权限 . 当您尝试在wiki的上下文中访问操作时 权限的构造定义了您在该wiki上需要的操作 和目录。 这是一个 必需的权限 .
将安全过滤器关闭注入控制器,如中所定义 conf/安全过滤器 你要求对页面做一些事情。 上述拦截器前部分 执行筛选器。 before拦截器构造所需的权限,定义 需要控制器和操作,如果与此wiki中的此页面相关。 before拦截器调用accessControl方法 通过JSecurity插件注入控制器。 accessControl方法被传递给闭包,闭包本身执行一个方法 权限,将所需权限作为参数。 这将通过插件导致执行CowDbRealm.isPermitted 用户参数和所需权限。 CowDbRealm检查数据库并查找 分配给此用户和用户角色 检查这些分配的权限中的每一个,以查看它是否意味着 所需的许可。 如果有,则允许访问。
4.11.3.1. 目录级授权
包含目录模式 这定义了允许访问的目录
排除目录模式 这定义了拒绝访问的目录
对于访问给定的目录或文件,配置的所有权限 将检查用户及其所有角色 如果任何配置的权限授予访问权限,则用户具有访问权限, 不考虑任何其他权限 对于每个配置的权限,都会检查 与wiki相关的目录,即位于wiki之后的URL部分 名称最多为,但不包括文件名。 我们将此称为“目录”。 例如,用于 http://www.gate.ac.uk/sam/mimir/doc/terials.html 这个 目录是mimir/doc/ 请注意,缺少前导斜杠和尾随斜杠
对于每个配置的权限,如果 以下情况属实: include模式匹配需要访问的整个目录 排除模式与访问的整个目录不匹配 是必需的
如果用户或其角色之一具有 任何 允许访问的权限 一个目录,则他们将有权访问-即使他们也有一个 具有该目录的排除模式的权限。 如果用户具有匹配的包含模式和 不匹配,则此权限授予访问权限 在所有其他情况下,他们被拒绝访问
模式总是与整个目录路径匹配。 不是这样的 足以将模式作为所需目录的组件找到 路径。 未检查路径中的前导斜杠
| |||
| |||
| |||
| | ||
| |
| |||
| |||
|
4.11.3.2. 通过CowPermission控件访问非页面控制器
处于工作站模式时的任何操作 所有控制器( * )对于管理员角色 寄存器控制器 ,授予匿名用户访问权限,用于注册 页 jcpatcha控制器 ,授予匿名用户访问权限,用于注册 页 用户控制器 ,授予匿名用户访问权限。 此控制器 显示有关当前登录用户的信息。 将所需权限分配给匿名用户的任何其他内容 角色,无论是否有用户登录或分配给该角色 角色。 这是通过SecurityService定义的。 身份验证控制器 ,授予任何人访问权限。 这是中定义的特殊情况 JSecurity插件本身,并允许访问登录表单等。 搜索控制器 ,将访问权授予搜索控制器,如同页面 正在调用控制器以执行显示操作
4.11.3.3. 用户和密码约束
4.11.3.4. 工作站和服务器模式下的安全性
仅在服务器模式下启用安全性。 在工作站模式下,本地用户可以访问所有内容 机器。 在工作站模式下,拒绝所有非本地用户访问 您可以在工作站模式下登录。 这样做不会给你带来额外的好处 从安全的角度来看。
4.11.4. 预定义的安全对象
管理是按服务器进行的,而不是按wiki进行的。 (由管理员负责) 服务器上的wiki。 管理员可以查看所有内容 上述特殊角色和集的名称在Config.groovy中定义 可以在启动时被覆盖。 请注意为新wiki创建的默认角色 当新用户注册时,他们会自动被置于默认角色。 将您希望新注册者访问的任何内容分配给此角色。lt。 任何人都可以看到分配给匿名角色的内容。 对jsec和管理页面的访问受到commission的限制。 这些控制器 未在任何权限中提及,因此只有管理员可以看到它们。 这可以改为明确提及。 如果您在CoW后面使用Hibernate HSQL内存中数据库,那么您 某些对象(如角色和 正在创建角色权限。 原因尚不清楚,但可能是因为 关闭时HSQL未正确保持?
4.11.5. 标记库
奶牛:负责人 输出用户名。 克服中的漏洞 jsec:主体 cow:is工作站 如果处于工作站模式,则为true 奶牛:isServer 如果处于服务器模式,则为true cow:未登录 如果没有人登录,则为true cow:是管理员 如果记录了管理员角色的成员,则为true 在里面 奶牛:canRead 如果用户具有读取指定页面的权限,则为true cow:can读写 如果用户有读写权限,则为true 指定的页面 奶牛:hasPermission 如果用户有权执行 指定页面上的指定操作 奶牛:缺少许可证 如果用户没有权限执行 指定页面上的指定操作
4.11.6. Jsecurity和GATE Wiki之间的代码依赖性
BootStrap创建一些默认角色和其他对象,如上所述。 Config配置JCaptcha,并设置预定义安全性的名称 物体 自定义标记用于提供用户特定的菜单 WikiController.save和WikiContrroller.delete使用SecurityService 为wiki创建和删除默认安全角色 PageController中的edit和newpage流从 安全服务。 有几个特定于安全和 登记
4.11.7. 已知漏洞并避免它们
密码是明文发布的,这对大多数设置来说可能不是问题。 如果是,则必须在servlet容器中处理它,方法是 在https中运行整个应用程序,或将发布的页面重定向到https 密码。 请注意,SHA1用于密码哈希,这可能不太好 足够安全敏感应用程序使用。 SHA1这是内置的 JSecurity插件中的默认值,必须更改或覆盖 如果你需要不同的算法。 (例如,可能通过编写新的 spring/resources.xml中的凭据匹配器bean) 您不应该使用jsec:principal标记,因为它不是HTML编码的 因此易受XSS攻击。 相反,使用cow:principal标记 解决了这个问题。 (在修复jsecurity之前-请参阅 吉拉
4.12. 特定于站点和Wiki的布局和导航
4.12.1. 导航
4.12.2. 替换主页布局
创建一个插件,该插件提供一个名为 gate.cow.GuestLayout控制器 和一个名为 牛仔 (该 控制器不需要做任何事情,但它是必要的,以便我们能够 导航Grails插件元数据以找到布局; 看见 考特斯门 查看血淋淋的细节) 这个 女牛仔 布局应包括以下功能元素的副本 这个 cowpage.gsp 布局,例如登录/编辑等。 存在链接 在新布局中 您可以在 网络应用程序 插件目录 打包插件并将其安装在CoW中,例如(对于 NLP站点 插件 网关wiki/nlp ): cd/ 自然语言处理 砾石 _ 主页=/ 圣杯/ grails/bin/grails包插件 光盘/ 奶牛 ant-Dgate.cow.grails.command=“install-plugin../nlp/grails-nlp-0.1.zip” 圣杯
这个 牛仔来宾 布局现在将被所有主要GSP引用 对于安装步骤和创建部署,有一个方便的脚本 在里面 cow/bin/create-custom-cow-site.sh 它复制了一头牛和 安装插件。 这对于创建战争或执行 圣杯竞选战 用于部署(另请参见 部署部分 ) 例如: cow/bin/create-custom-cow-site.sh-n nlp-p `密码`/nlp/ggrails-nlp-0.1.zip 将创建补丁 自然语言处理 网站
光盘gatewiki/site-plugins GRAILS_HOME=/ 圣杯/ grails/bin/grails创建插件g8rs 光盘g8rs GRAILS_HOME=..// 圣杯..// grails/bin/grails创建控制器\ gate.cow.GuestLayout网站 …现在编辑grails-app/views/layouts/cowguest.gsp。。。 GRAILS_HOME=..// 圣杯..// grails/bin/grails包插件 cow/bin/create-custom-cow-site.sh-n g8rs-p`pwd`/site-plugins/g8rs
4.12.3. 更改标题或徽标
gate.cow.name.short=“cow-开发模式” gate.cow.name.long=“cow-开发模式,可控Wiki”
gate.cow.default.logo=“/g8/page/show/2/my徽标.png”
4.12.4. 处理非本机HTML页面
通过设置 gate.cow.security.allow.user.raw.html 在您的 .cowrc.groovy公司 指示用户将名为 .cow-raw-html型 在每个目录中 非本机HTML应原始提供
包含目录模式 以下为: 这指定了允许的目录 为非本地HTML提供服务 排除目录模式 以下为: 这指定了以下目录 限制为非本机HTML提供服务
4.13条。 引用和再生
如果请求的输出(例如.html)比.yam文件年轻 如果已创建、修改、重命名或删除任何包含的文件 如果已重命名、添加或删除任何链接文件
页面或目录是 创建 过期所有链接器和包含器 重命名 更新所有链接器和包含器 删除 更新所有链接器和包含器 被改进的 过期所有包含项
CoW公司 svn向上 在工作站模式下,各种编辑器等。
Yam文件生成 WikiController.show/create/等,可能由SVN通知补充 单独的过程
4.13.1。 序列化
4.13.2. 再生
当在Wiki管理“显示”页面上单击“重新生成”按钮时。 使用 如果依赖关系被破坏了,你需要一个再生 每天一次,当达到指定的wiki时间时。 这次是 在wiki管理页面中指定。 作为空字符串给定的时间 (默认)表示无每日再生。 这种再生方式是 由WikiRegenerationJob控制。 无论何时更改wiki域对象,例如,如果要更改 wiki的基本路径。 如果要删除wiki的序列化依赖项,那么它们 将在下次需要时重新生成。
4.13.3. 运行速度SVN状态
用户通过文件系统中的沙盒进行编辑 用户使用存储库中的更改更新沙盒 用户通过wiki进行编辑 用户要求wiki更新
直接检查文件系统的低优先级进程 从SVN存储库接收通知的侦听器 运行的进程 svn标准 获取已更改文件的报告
| | ||||||||
|
|
4.14. Sourceforge注释
Sourceforge项目 这些页面的Sourceforge副本 ssh-l用户名shell.sourceforge.net 更新 http://gatewiki.sf.net/ 页 /home/groups/g/ga/gatewiki/htdocs是一个目录 发布为 http://gatewiki.sf.net/ 要更新它们,请构建helpdocs.zip(通过ant-doc),然后 使用bin/update-sourceforge-web.sh(首先更改用户名),或 sftp hcunningham, gatewiki@web.sourceforge.net网站
4.15. Grails MVC备注
首先是命中应用程序上下文路径(例如“cow”)的请求 根据中的规则筛选 配置/。。。 URL映射.groovy 然后 匹配时分配给控制器/操作。 的部分 请求被分配给 参数 控制器的属性(通常 包括 身份证件 域对象的)。 行动要么 提供 直接显示视图或返回地图(模型) 然后由Grails将其转发到视图(视图通常是GSP)。 视图由布局装饰(使用一些构建在 Sitemesh)。 视图将提供给请求客户端。
4.16. IntelliJ注释
从下载IDEA http://www.jetbrains.com/idea/download/index.html#linux 将tar文件解压缩到磁盘中的某个位置,例如userhome/apps/ 要运行idea,请将此命令行用作模型:sh-c’export JDK公司 _ HOME=/path/to/java/for/idea/1.6/min&&export 爪哇 _ HOME=/path/to/java/for/your/项目&& /usr/local/idea-9164/bin/idea.sh“ 查看安装 _ 创意之家中的Linux-tar.txt,在那里你可以看到如何 启动它。 值得一提的是增加JVM堆大小,以便 这个想法可以执行得更快。 要调整JVM堆大小的值,请打开 bin/idea.vmoptions并修改-Xms和-Xmx参数。 首次打开Intellij后,应该会在上看到插件链接 右上角的屏幕。 如果没有,请使用Ctrl+Alt+S打开IDE设置 窗口,然后转到插件选项卡,在那里您应该可以看到所有已安装的 插件。 接下来,单击可用选项卡并搜索“Groovy”。 然后是你 应该找到JetGroovy插件。 安装JetGroovy插件后, 您需要重新启动IDEA。 现在您再次打开IDE设置窗口,应该会看到Groovy&Grails 窗口左侧的图标。 单击它并设置本地Groovy和 Grails安装目录。 从平台设置设置项目JDK。 要导入Cow,请单击文件选项卡中的新建项目,然后选择 “从现有源创建项目”,下一步选择您的 当地奶牛。 自动格式化:转到IDEA设置并找到全局代码样式。 设置 GATE约定的制表符、缩进等。 一旦你打开每个 源文件,可以使用Ctrl+Alt+L或右键单击文件名并 选择重新格式化代码。 要调试,请使用菜单“运行”->“编辑配置”,如果 尚未使用选项localhost,5005并取消选中所有 选项。 然后通过单击 文件,运行 ant运行调试 并在Idea中使用菜单Run->debug。
4.17。 搜索基础设施
4.17.1. 安装
4.17.1.1. 目录结构
Nutch和Solr已入住 gatewiki/nutch-solr Nutch(版本1.0-dev,2009年2月26日下载) nutch源被检入 gatewiki/nutch-solr/nutch .面向未来 升级时,应在此处更新源代码。 gatewiki/nutch-solr/nutch-config 有一组配置文件 已针对CoW用途进行了定制。 下的所有文件 螺母配置 文件夹需要在类路径上可见。 这个 索引服务.groovy , 它负责启动索引进程,添加 螺母配置 在开始实际索引之前,类路径上的文件夹 进程位于单独的JVM实例中。 除了 爬网-urlsfilters.xml ,无 此文件夹中的文件需要在运行时更改,因此可以 在奶牛场的不同实例之间安全共享。 理想情况下是一个 将要爬网到子文件夹中。 然而,出于某种原因,nutch会爬行 回到父文件夹中。 螺母的这种行为导致 不良结果。 在nutch的网站上发布的解决方案是创建一个 正则表达式,以便只有属于顶级的文件 文件夹或其任何子文件夹都被编入索引。 此正则表达式需要 添加到 爬网过滤器.xml 在开始实际操作之前 索引。 这是唯一的原因 爬网过滤器.xml 每编辑一次 发出时间索引命令。 为了解决这个问题,我们计划 以下内容: 重命名文件 爬网过滤器.xml 到 urlfilters-default.xml .这个 默认情况下,文件将具有不需要在更改的url筛选器 全部。 自从nutch搜索 爬网过滤器.xml 在类路径上, 重命名此文件不会使其对nutch可用。 每次开始索引之前,都会创建一个临时文件夹 文件名为 爬网过滤器.xml 该文件将包含 中的内容 url过滤器-默认.xml 和的正则表达式 顶级目录。 然后,这个文件夹将被放置在类路径上。
Solr(1.3.0版) 我们复制了 例子 从Solr签出到的目录 solr-app软件 solr-app/solr软件 是运行单个索引的设置 solr-app/多核 是运行多个核心(索引)的设置 solr-app/multicore/solr.xml 指定要用于的核心数 索引。 目前,限制设置为最多20个芯。 我们创造了 solr-app/多核/conf 目录并放置所有配置 要在不同内核之间共享的文件。 我们修改了 schema.xml 以指定nutch为索引生成的字段。 它 还包含其他与搜索相关的配置设置。 solr-app/webapps 包含 solr.war公司 通过指向的文件 配置.groovy 来自CoW。 如果有人想升级solr应用程序, 他或她必须更新solr.war文件。 无需进行其他更改 对任何其他配置文件进行。 与wiki区域关联的所有索引文件都存储在 ${user.home}/$ {dot}cowrc.d /${版本}/索引 按照 配置.groovy 其中每个核心都有自己的文件夹来存储其索引数据。 浏览到 http://localhost:8080/solr 例如。。。 为了验证搜索查询,我们使用lucene的查询解析器。 因此,lucene的核心库(来自 solr-app/webapps/solr.war )是 复制到 牛/利布 文件夹。 升级solr库时,请 确保lucene库与较新的solr版本兼容。
我们写了一个包装纸( gatewiki/nutch-solr/src )简化CoW的呼叫。 它有几种不同的方法来操作Solr索引中的数据。
4.17.1.2. 启用Solr
4.17.2. 从CoW索引wikis/单个文件
4.17.2.1. 索引单个Wiki区域
以具有管理权限的用户身份登录。 单击“Admin”(管理)链接。 单击“Wiki区域”链接。 每个wiki区域列表都有一个指向该wiki区域的管理员索引的链接。 管理区域提供了索引或删除现有索引的选项。 单击“索引”按钮在后台启动索引,同时 用适当的消息更新屏幕。 注: 更改wiki时 需要删除任何现有索引并使用新的 路径。 单击“删除”按钮可删除该特定区域的索引。
4.17.2.2. 为单个文件编制索引
4.17.3. 测试
4.17.4. 调试
首先要检查的是索引队列。 无论何时提交请求 为了索引wiki区域,请求被排队。 索引作业 ,如果空闲, 每隔几秒钟访问此队列并执行 队列。 请注意,索引可能需要几分钟到几分钟的时间 小时数取决于wiki区域中的文档数。 你可以检查一下 单击 索引队列 链接 上 管理索引 第页。 页面每隔几秒钟刷新一次。 如果您看不到此页面上列出的请求,则表示您的请求 已执行。 请重试搜索。 通常,如果您正在搜索的wiki区域没有索引,您 当您尝试在该区域进行搜索时,应该会收到相应的消息。 如果 您确信已为wiki区域编制了索引,但仍会收到消息, 这可能意味着索引没有成功完成。 在这种情况下, 请参阅 cow/solr0.log(牛/索尔0.log) 文件中查找任何异常。 另一种检查索引是否成功运行的方法是访问 这个 统计 上的链接 管理员索引 第页。 请查看价值 的 num文档 在CORE部分下。 如果是的话 不 0,这意味着 索引中有文件,但搜索没有返回任何值。 你可以 发出以下查询 url:文件 * ,它将为您提供所有 已编制索引的文件。 但是,如果值为0,则任一索引都找不到任何 要索引的文件或索引时发生异常(请参阅 cow/solr0.log(牛/索尔0.log) 对于任何例外情况)。 最后,nutch创建一个临时文件夹(应该以 爬行 ) 在 /临时管理计划 文件夹存储已爬网文件的临时索引。 这个 文件夹将有两个文件 爬网过滤器.txt 和 网址 . The网址 文件 包含指向您请求索引的文件夹或文件的url。 这个 爬行过滤器.txt 用于筛选出某些类型的文件。 请确保 网址 文件未获取 过滤掉了。
4.18. SVN浏览
4.18.1. CoW中关于Sventon的注释
将editableConfig设置为true 将配置位置设置为 {cowrc.d} /sventon配置 通过JMX公开一个管理接口,允许CoW重新初始化 sventon,例如在添加新的wiki区域时。