2014-10-16 51 views
1

当在jboss-cli.bat(用于windows的MS-DOS批处理文件)上发出以下命令以创建在WildFly 8.1.0最终在this migration guide提到的安全领域,在WildFly 8.1.0上创建安全领域 - 发出命令创建领域时,节点路径格式错误'

./subsystem=security/security-domain=app:add(cache-type="default") 
    cd ./subsystem=security/security-domain=app 
    ./authentication=classic:add(
     login-modules=[ { 
     code="Database", 
     flag="required", 
     module-options={ 
      dsJndiName="java:/jdbc/project_datasource", 
      principalsQuery="SELECT password FROM user_role_table WHERE user_id=?", 
      rolesQuery="SELECT group_id, 'Roles' 
         FROM group_table gt INNER JOIN user_role_table urt ON gt.user_group_id = urt.user_id 
         WHERE urt.user_id=?", hashAlgorithm="SHA-256", 
      hashEncoding="BASE64", 
      unauthenticatedIdentity="guest" 
     } 
     }, { 
     code="RoleMapping", 
     flag="required", 
     module-options={ 
      rolesProperties="file:${jboss.server.config.dir}/app.properties", 
      replaceRole="false" 
     } 
     } 
    ]) 

我得到命令行提示符以下错误:“CD”

节点路径格式不对周围(索引67)

如果删除了cd,则会报告以下错误。

无法执行读调度研究-描述来验证所述请求: java.util.concurrent.ExecutionException:操作失败

该命令在一个连续的文本格式给出如下。

./subsystem=security/security-domain=app:add(cache-type="default") cd ./subsystem=security/security-domain=app ./authentication=classic:add(login-modules=[ {code="Database",flag="required",module-options={dsJndiName="java:/jdbc/project_datasource",principalsQuery="SELECT password FROM user_role_table WHERE user_id=?",rolesQuery="SELECT group_id, 'Roles' FROM group_table gt INNER JOIN user_role_table urt ON gt.user_group_id = urt.user_id WHERE urt.user_id=?",hashAlgorithm="SHA-256",hashEncoding="BASE64",unauthenticatedIdentity="guest"}},{code="RoleMapping",flag="required",module-options={rolesProperties="file:${jboss.server.config.dir} /app.properties",replaceRole="false"}}]) 

什么是修复?我只是不想将XML复制到配置文件,因为它可能会因版本而异。

回答

2

问题是在单行上组合更多命令。

简单的解决方案是使用外部文件来存储CLI命令。

E.g.在wildfly-8.1.0.Final/bin文件夹中创建security-domain.cli文件有以下内容(如果要分割到多个行一个命令,把反斜杠作为最后一个字符):

/subsystem=security/security-domain=app:add(cache-type="default") 
/subsystem=security/security-domain=app/authentication=classic:add() 
/subsystem=security/security-domain=app/authentication=classic/login-module=Database:add(\ 
    code="Database", \ 
    flag="required", \ 
    module-options=[ \ 
     ("dsJndiName"=>"java:/jdbc/project_datasource"), \ 
     ("principalsQuery"=>"SELECT password FROM user_role_table WHERE user_id=?"), \ 
     ("rolesQuery"=>"SELECT group_id, 'Roles' FROM group_table gt INNER JOIN user_role_table urt ON gt.user_group_id = urt.user_id WHERE urt.user_id=?"), \ 
     ("hashAlgorithm"=>"SHA-256"), \ 
     ("hashEncoding"=>"BASE64"), \ 
     ("unauthenticatedIdentity"=>"guest") \ 
    ]) 
/subsystem=security/security-domain=app/authentication=classic/login-module=RoleMapping:add(\ 
    code="RoleMapping", \ 
    flag="required", \ 
    module-options=[ \ 
     ("rolesProperties"=>"file:${jboss.server.config.dir}/app.properties"), \ 
     ("replaceRole"=>"false") \ 
    ]) 

(你的样品中含有设置登录模块的旧式这是一个过时。现在的方式,这样的例子使用的新方法)

运行与JBoss CLI工具的新文件:

jboss-cli.bat -c --file=security-domain.cli 
+0

谢谢。这个命令'jboss-cli.bat -c -file = security-domain.cli'不会在'wildfly-8.1'中创建'security-domain.cli'文件后在'jboss-cli.bat'提示符下运行.0最终/ bin文件夹“。 JBoss CLI工具是要单独安装的东西吗? – Tiny 2014-10-18 20:49:01

+0

JBoss CLI工具是由'jboss-cli.bat'开始的。 – kwart 2014-10-19 09:04:38

+0

您不需要在交互模式下启动它。只需从标准Windows命令行(例如cmd.exe)启动给定的命令即可。 '-c'参数自动连接到WildFly,'--file ='设置要运行的命令的文件路径。 – kwart 2014-10-19 09:10:46