博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
grails-shiro权限认证
阅读量:5119 次
发布时间:2019-06-13

本文共 2743 字,大约阅读时间需要 9 分钟。

一.引用shiro插件

//在BuildConfig的plugins下面添加compile ":shiro:1.2.1"

二.引用新插件后要进行编译

//grails命令compile

三.生成脚手架文件

//grials命令 , 要注意的是后面的那个点,否则生成好的文件会混乱shiro-quick-start --prefix=com.security.

四.配置Bootstrap.groovy

class BootStrap {    def shiroSecurityService    def init = { servletContext ->        // Create the admin role        def adminRole = Role.findByName('ROLE_ADMIN') ?:                new Role(name: 'ROLE_ADMIN').save(flush: true, failOnError: true)        // Create the user role        def userRole = Role.findByName('ROLE_USER') ?:                new Role(name: 'ROLE_USER').save(flush: true, failOnError: true)        // Create an admin user        def adminUser = User.findByUsername('admin') ?:                new User(username: "admin",                passwordHash: shiroSecurityService.encodePassword('password'))                .save(flush: true, failOnError: true)        // Add roles to the admin user        assert adminUser.addToRoles(adminRole)        .addToRoles(userRole)        .save(flush: true, failOnError: true)        // Create an standard user        def standardUser = User.findByUsername('joe') ?:                new User(username: "joe",                passwordHash: shiroSecurityService.encodePassword('password'))                .save(flush: true, failOnError: true)        // Add role to the standard user        assert standardUser.addToRoles(userRole)        .save(flush: true, failOnError: true)    }    def destroy = {    }}

五.增加一个Controller

package com.securityclass HomeController {    def index() {        render ("此页面不需要登陆")    }    def secured() {        render ("此页面需要用户或者管理员登陆")    }    def admin() {        render ("此页面需要管理员登陆")    }}

六.修改com.security.SecurityFilters.groovy

package com.security/** * Generated by the Shiro plugin. This filters class protects all URLs * via access control by convention. */class SecurityFilters {    def filters = {        //1.role_admin        home(controller: "home",action: "admin"){            before = {                accessControl{                    role("ROLE_ADMIN");                }            }        }        //2.role_user        home_securied(controller: "home",action: "secured"){            before = {                accessControl{                    role("ROLE_USER");                }            }        }    }}

这里使用的是shiroPlugin提供的accessControl,role方法会划横线,这里是不影响程序运行的,

使用 role( …… ),验证访问对象是否具有相应的角色;

使用 permission( …… ),验证访问对象是否具有相应的 Permission。

这里没有使用shiro的Tag但是也做一点称述

下是经常使用到的 Tag:

  • ,输出当前用户的标识
  • hasRole,判断当前用户是否属于给定的角色,参数:name
  • hasPermission, 判断当前用户是否具有指定的权限,参数:type,action 或者 permission
  • ,判断当前用户是否已经登录
  • hasAnyRole,判断当前用户是否属于给定的某个角色,参数:in

使用方式

 

转载于:https://www.cnblogs.com/duwenlei/p/4186181.html

你可能感兴趣的文章
Java SE和Java EE应用的性能调优
查看>>
Android设计模式系列--原型模式
查看>>
免费的论文查重网站
查看>>
C语言程序第一次作业
查看>>
leetcode-Sort List
查看>>
中文词频统计
查看>>
了解node.js
查看>>
想做移动开发,先看看别人怎么做
查看>>
Eclipse相关集锦
查看>>
虚拟化架构中小型机构通用虚拟化架构
查看>>
继承条款effecitve c++ 条款41-45
查看>>
HTML+CSS学习笔记(九)
查看>>
Java泛型的基本使用
查看>>
1076 Wifi密码 (15 分)
查看>>
rsync
查看>>
noip模拟赛 党
查看>>
bzoj2038 [2009国家集训队]小Z的袜子(hose)
查看>>
Java反射机制及其Class类浅析
查看>>
Postman-----如何导入和导出
查看>>
移动设备显示尺寸大全 CSS3媒体查询
查看>>