давайте сначала начнем со свежего приложения:
grails create-app ShiroDemo
теперь установите широбы, добавив его в раздел плагинов BuildConfig.groovy:
plugins {compile ": shiro: 1.1.4"}
нам нужен контроллер аутентификации и подстановочный знак:
grails create-auth-controller
grails create-wildcard-realm
теперь давайте создадим фиктивного пользователя с необходимой ролью и разрешениями в bootstrap.groovy
:
import org.apache.shiro.crypto.hash.Sha256Hash
class BootStrap {
def init = { servletContext ->
def roleUser = new ShiroRole(name:'USER')
roleUser.addToPermissions('auth:*')
roleUser.addToPermissions('controller:action')
roleUser.save(flush:true, failOnError: true)
def testUser = new ShiroUser(username:'kermit',passwordHash:new Sha256Hash("password").toHex())
testUser.addToRoles(roleUser)
testUser.save(flush:true, failOnError: true)
}
def destroy = {
}
}
Взгляните на role.User.addToPermissions
строки.Здесь вы предоставляете разрешения для ваших контроллеров и действий.Если роли не хватает разрешения, пользователь будет перенаправлен на страницу отказа в доступе.Хорошее описание того, как задать разрешения, вы можете найти на странице плагина Широ: http://www.grails.org/plugin/shiro Вам нужно будет добавить больше разрешений для остальной функциональности вашего приложения.Вы также можете добавить эти разрешения непосредственно пользователю - иногда это полезно для тестирования или если вы не хотите устанавливать новую роль для чего-то особенного.
Кстати: обязательно используйте sha256hash, а не sha1hash, которыйне будет работать с текущей версией Shiro.
Последнее, что мы должны сделать, это создать класс /conf/SecurityFilters.groovy
:
class SecurityFilters {
def filters = {
all(uri: "/**") {
before = {
// Ignore direct views (e.g. the default main index page).
if (!controllerName) return true
// Access control by convention.
accessControl()
}
}
}
}
Это установит контроль доступа для всех контроллеров, но не для прямого просмотра.(наша страница указателя).
Теперь попробуйте запустить ваш проект:
grails run-app
Надеюсь, это поможет!