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
相关产品推荐
相关产品推荐

