grails-shiro許可權認證
阿新 • • 發佈:2019-01-07
一.引用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 userassert 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.security class 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
使用方式
<shiro:hasPermission permission="home:index,admin"> <span class="button"> <g:actionSubmit class="edit" value="Edit" /> </span> <span class="button"> <g:actionSubmit class="delete" onclick="return confirm('Are you sure?');" value="Delete" /> </span> </shiro:hasPermission>