Как отобразить настраиваемую страницу ошибки для запрещенного доступа к URL-адресу в Grails 3.3.9

В моем приложении grails 3.3.9 реализованы разные модули с разным доступом на основе ROLE с использованием Spring Security.

Доступ к AdminController осуществляется через ROLE_ADMIN. Если пользователь, не являющийся администратором, вошел в систему и попытался получить доступ к Admin URL, то Grails отобразит

[Image]Сообщение об ошибке Grails: Sorry, you're not authorized to view this page.

Я хочу показать свое собственное сообщение.

[Image: ]Пользовательское сообщение: 403 Access Forbidden

приложение .groovy

grails.plugin.springsecurity.interceptUrlMap = [
        [pattern: '/user/**', access: ['IS_AUTHENTICATED_FULLY']],
        [pattern: '/role/**', access: ['ROLE_ADMIN']],
        [pattern: '/', access: ['IS_AUTHENTICATED_FULLY']],
        [pattern: '/admin/*', access: ['ROLE_ADMIN']]]

URLMappings

"500"(controller: "error", action: "internalServerError")
"404"(controller: "error", action: "notFound")
"403" (controller: "error", action: "forbidden")
"403"(view: "/error/forbidden")

У меня индивидуально для 403.

500 & 404 работает правильно.


person BornOn27    schedule 18.02.2020    source источник


Ответы (2)


В URlMappings вы можете установить сопоставление с кодом ответа и выбрать контроллер или представление для ответа, например:

static mappings = {
    // ... other mappings ...
    // Send 403's to a controller if you'd like to do additional logic
    "403"(controller: "errors", action: "forbidden")
    // Or just render a static view under grails-app/views/errors/forbidden.gsp
    "403"(view: "/errors/forbidden")
}

См.: http://docs.grails.org/4.0.1/guide/single.html#mappingToResponseCodes

person erichelgeson    schedule 18.02.2020
comment
Извините, я забыл упомянуть URLMapping. Я определил действие для 403, но оно все равно не работает. Вы можете видеть выше - person BornOn27; 19.02.2020
comment
У вас есть 2 определения для 403? Попробуйте только с видом ИЛИ с контроллером. - person erichelgeson; 19.02.2020
comment
Я пробовал в любом случае. я сразу об этом упомянул - person BornOn27; 21.02.2020

Вам также необходимо установить следующую конфигурацию в application.groovy.

grails.plugin.springsecurity.adh.errorPage = null //to throw 403 page on access denied
person user1071671    schedule 16.06.2021