давайте сначала начнем со свежего приложения:
grails create-app ShiroDemo
Теперь установите shiroby, добавив его в раздел плагинов BuildConfig.groovy:
плагины {компилировать ":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
. Здесь вы предоставляете разрешения своим контроллерам и действиям. Если у роли отсутствует разрешение, пользователь будет перенаправлен на страницу отказа в доступе. Вы найдете хорошее описание того, как указывать разрешения на странице подключаемого модуля shiro: 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
надеюсь, это поможет!
person
rdmueller
schedule
29.04.2011