How to return 404 for pages that do not exist when using Grails Spring Security Plugin

Viewed 172

I'm using Grails 3.3.9 with the spring security core plugin 3.2.3 to secure a website.

The problem I have is that now users receive a 403 for pages that do not exist instead of a 404.

How can I make sure that if a page does not exist, a 404 NOT FOUND http status code is returned?


grails.plugin.springsecurity.securityConfigType = "Annotation"
grails.plugin.springsecurity.userLookup.userDomainClassName = 'com.website.User'
grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'com.website.UserRole'
grails.plugin.springsecurity.authority.className = 'com.website.Role'
grails.plugin.springsecurity.controllerAnnotations.staticRules = [
  [pattern: '/',               access: ['permitAll']],
    [pattern: '/error',          access: ['permitAll']],
  [pattern: '/404',            access: ['permitAll']],
    [pattern: '/index',          access: ['permitAll']],
    [pattern: '/index.gsp',      access: ['permitAll']],
    [pattern: '/shutdown',       access: ['permitAll']],
    [pattern: '/assets/**',      access: ['permitAll']],
    [pattern: '/**/js/**',       access: ['permitAll']],
    [pattern: '/**/css/**',      access: ['permitAll']],
    [pattern: '/**/images/**',   access: ['permitAll']],
    [pattern: '/**/favicon.ico', access: ['permitAll']],
        [pattern: '/**',   access: ['ROLE_SUPER_ADMIN']]
]

grails.plugin.springsecurity.filterChain.chainMap = [
    [pattern: '/**/js/**',       filters: 'none'],
    [pattern: '/**/css/**',      filters: 'none'],
    [pattern: '/**/images/**',   filters: 'none'],
    [pattern: '/**/favicon.ico', filters: 'none'],
    [pattern: '/**',             filters: 'JOINED_FILTERS']
]

In my url mappings I have

class UrlMappings {


    static mappings = {


        name root: "/" (controller: "search", action: "create")


        // DO NOT DELETE, we need this for acJson and other actions.
        "/$controller/$action?/$id?(.$format)?"{
            constraints {
                // apply constraints here
            }
        }

        "500"(view:'/error')
        "404"(view:'/404')

    }
1 Answers

u need a controller

class UrlMappings {

    static mappings = {
        "/$controller/$action?/$id?(.$format)?"{
            constraints {
                // apply constraints here
            }
        }

        "/"(controller: "portal", action: "index")
        "500"(controller: "error", action: "page500")
        "404"(controller: "error", action: "page404")
    }

}
class ErrorController {
    def page404() { render view: "page404" }
}
Related