You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Grails 6.1.2中Shiro插件CLI命令报错:Unmatched argument at index 0

问题描述

在Grails 6.1.2环境中集成grails-shiro:4.4插件时,执行旧Grails CLI命令grails shiro-quick-start报错:

Unmatched argument at index 0: 'shiro-quick-start' Did you mean grails create-service or grails create-restapi or grails create-taglib?

原因是Grails 6+的CLI做了重大变更,原有的grails run-app等命令已被移除,改用gradle bootRun启动应用,但Shiro插件提供的旧CLI命令未适配新的Gradle-based CLI,现有文档也未更新。

解决方案

1. 尝试用Gradle任务执行插件命令

Grails 6+基于Gradle构建,多数插件的CLI命令会自动映射为Gradle任务,直接尝试执行:

gradle shiro-quick-start

如果不确定任务名称,可以先查看Shiro相关的Gradle任务列表:

gradle tasks --group=Shiro

如果能找到对应任务,直接执行即可。

2. 手动实现Shiro快速启动的核心内容

如果插件没有提供对应的Gradle任务,可以手动完成shiro-quick-start的核心工作:

  • 创建域类:在grails-app/domain下创建User、Role、Permission三个域类,配置它们之间的多对多关联:
    // User.groovy
    class User {
        String username
        String passwordHash
        static hasMany = [roles: Role]
        static belongsTo = Role
    }
    
    // Role.groovy
    class Role {
        String name
        static hasMany = [users: User, permissions: Permission]
        static belongsTo = [User, Permission]
    }
    
    // Permission.groovy
    class Permission {
        String name
        static hasMany = [roles: Role]
        static belongsTo = Role
    }
    
  • 配置Shiro Realm:在grails-app/conf/spring/resources.groovy中添加自定义Realm的Bean配置:
    import org.apache.shiro.realm.Realm
    import com.yourpackage.shiro.CustomRealm
    
    beans = {
        realm(CustomRealm)
    }
    
  • 配置Shiro过滤器:在application.yml中添加Shiro的过滤器和安全规则:
    grails:
        plugin:
            shiro:
                filter:
                    chainMap:
                        - '/assets/** = anon'
                        - '/login/** = authc'
                        - '/logout = logout'
                        - '/** = authc'
    

3. 给Shiro插件添加Gradle兼容命令(自定义扩展)

如果需要让插件支持新的CLI,可以将旧的Grails CLI命令迁移为Gradle任务:

  • 在插件项目中创建Gradle任务类,继承DefaultTask,实现shiro-quick-start的生成逻辑:
    import org.gradle.api.DefaultTask
    import org.gradle.api.tasks.TaskAction
    
    class ShiroQuickStartTask extends DefaultTask {
        @TaskAction
        void run() {
            // 实现生成域类、配置文件的逻辑,参考原插件的CLI命令代码
        }
    }
    
  • 在插件的build.gradle中注册该任务:
    tasks.register('shiroQuickStart', ShiroQuickStartTask) {
        group = 'Shiro'
        description = 'Quick start setup for Grails Shiro plugin'
    }
    
  • 打包更新后的插件,在应用中引入即可通过gradle shiroQuickStart执行命令。

内容的提问来源于stack exchange,提问作者Scott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 03:43:24