diff --git a/6.0.2/code/s2-quickstart-old/grails-app/assets/images/apple-touch-icon-retina.png b/6.0.2/code/s2-quickstart-old/grails-app/assets/images/apple-touch-icon-retina.png new file mode 100644 index 000000000..5cc83edbe Binary files /dev/null and b/6.0.2/code/s2-quickstart-old/grails-app/assets/images/apple-touch-icon-retina.png differ diff --git a/6.0.2/code/s2-quickstart-old/grails-app/assets/images/apple-touch-icon.png b/6.0.2/code/s2-quickstart-old/grails-app/assets/images/apple-touch-icon.png new file mode 100644 index 000000000..aba337f61 Binary files /dev/null and b/6.0.2/code/s2-quickstart-old/grails-app/assets/images/apple-touch-icon.png differ diff --git a/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/database_add.png b/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/database_add.png new file mode 100644 index 000000000..802bd6cde Binary files /dev/null and b/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/database_add.png differ diff --git a/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/database_delete.png b/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/database_delete.png new file mode 100644 index 000000000..cce652e84 Binary files /dev/null and b/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/database_delete.png differ diff --git a/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/database_edit.png b/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/database_edit.png new file mode 100644 index 000000000..e501b668c Binary files /dev/null and b/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/database_edit.png differ diff --git a/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/database_save.png b/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/database_save.png new file mode 100644 index 000000000..44c06dddf Binary files /dev/null and b/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/database_save.png differ diff --git a/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/database_table.png b/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/database_table.png new file mode 100644 index 000000000..693709cbc Binary files /dev/null and b/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/database_table.png differ diff --git a/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/exclamation.png b/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/exclamation.png new file mode 100644 index 000000000..c37bd062e Binary files /dev/null and b/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/exclamation.png differ diff --git a/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/house.png b/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/house.png new file mode 100644 index 000000000..fed62219f Binary files /dev/null and b/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/house.png differ diff --git a/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/information.png b/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/information.png new file mode 100644 index 000000000..12cd1aef9 Binary files /dev/null and b/6.0.2/code/s2-quickstart-old/grails-app/assets/images/skin/information.png differ diff --git a/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/apple-touch-icon-retina.png b/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/apple-touch-icon-retina.png new file mode 100644 index 000000000..5cc83edbe Binary files /dev/null and b/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/apple-touch-icon-retina.png differ diff --git a/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/apple-touch-icon.png b/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/apple-touch-icon.png new file mode 100644 index 000000000..aba337f61 Binary files /dev/null and b/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/apple-touch-icon.png differ diff --git a/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/database_add.png b/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/database_add.png new file mode 100644 index 000000000..802bd6cde Binary files /dev/null and b/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/database_add.png differ diff --git a/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/database_delete.png b/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/database_delete.png new file mode 100644 index 000000000..cce652e84 Binary files /dev/null and b/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/database_delete.png differ diff --git a/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/database_edit.png b/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/database_edit.png new file mode 100644 index 000000000..e501b668c Binary files /dev/null and b/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/database_edit.png differ diff --git a/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/database_save.png b/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/database_save.png new file mode 100644 index 000000000..44c06dddf Binary files /dev/null and b/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/database_save.png differ diff --git a/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/database_table.png b/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/database_table.png new file mode 100644 index 000000000..693709cbc Binary files /dev/null and b/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/database_table.png differ diff --git a/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/exclamation.png b/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/exclamation.png new file mode 100644 index 000000000..c37bd062e Binary files /dev/null and b/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/exclamation.png differ diff --git a/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/house.png b/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/house.png new file mode 100644 index 000000000..fed62219f Binary files /dev/null and b/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/house.png differ diff --git a/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/information.png b/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/information.png new file mode 100644 index 000000000..12cd1aef9 Binary files /dev/null and b/6.0.2/code/s2-quickstart-requestmap/grails-app/assets/images/skin/information.png differ diff --git a/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/apple-touch-icon-retina.png b/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/apple-touch-icon-retina.png new file mode 100644 index 000000000..5cc83edbe Binary files /dev/null and b/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/apple-touch-icon-retina.png differ diff --git a/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/apple-touch-icon.png b/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/apple-touch-icon.png new file mode 100644 index 000000000..aba337f61 Binary files /dev/null and b/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/apple-touch-icon.png differ diff --git a/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/database_add.png b/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/database_add.png new file mode 100644 index 000000000..802bd6cde Binary files /dev/null and b/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/database_add.png differ diff --git a/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/database_delete.png b/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/database_delete.png new file mode 100644 index 000000000..cce652e84 Binary files /dev/null and b/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/database_delete.png differ diff --git a/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/database_edit.png b/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/database_edit.png new file mode 100644 index 000000000..e501b668c Binary files /dev/null and b/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/database_edit.png differ diff --git a/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/database_save.png b/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/database_save.png new file mode 100644 index 000000000..44c06dddf Binary files /dev/null and b/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/database_save.png differ diff --git a/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/database_table.png b/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/database_table.png new file mode 100644 index 000000000..693709cbc Binary files /dev/null and b/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/database_table.png differ diff --git a/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/exclamation.png b/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/exclamation.png new file mode 100644 index 000000000..c37bd062e Binary files /dev/null and b/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/exclamation.png differ diff --git a/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/house.png b/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/house.png new file mode 100644 index 000000000..fed62219f Binary files /dev/null and b/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/house.png differ diff --git a/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/information.png b/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/information.png new file mode 100644 index 000000000..12cd1aef9 Binary files /dev/null and b/6.0.2/code/s2-quickstart-rolegroup/grails-app/assets/images/skin/information.png differ diff --git a/6.0.2/code/s2-quickstart/grails-app/assets/images/apple-touch-icon-retina.png b/6.0.2/code/s2-quickstart/grails-app/assets/images/apple-touch-icon-retina.png new file mode 100644 index 000000000..5cc83edbe Binary files /dev/null and b/6.0.2/code/s2-quickstart/grails-app/assets/images/apple-touch-icon-retina.png differ diff --git a/6.0.2/code/s2-quickstart/grails-app/assets/images/apple-touch-icon.png b/6.0.2/code/s2-quickstart/grails-app/assets/images/apple-touch-icon.png new file mode 100644 index 000000000..aba337f61 Binary files /dev/null and b/6.0.2/code/s2-quickstart/grails-app/assets/images/apple-touch-icon.png differ diff --git a/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/database_add.png b/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/database_add.png new file mode 100644 index 000000000..802bd6cde Binary files /dev/null and b/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/database_add.png differ diff --git a/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/database_delete.png b/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/database_delete.png new file mode 100644 index 000000000..cce652e84 Binary files /dev/null and b/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/database_delete.png differ diff --git a/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/database_edit.png b/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/database_edit.png new file mode 100644 index 000000000..e501b668c Binary files /dev/null and b/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/database_edit.png differ diff --git a/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/database_save.png b/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/database_save.png new file mode 100644 index 000000000..44c06dddf Binary files /dev/null and b/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/database_save.png differ diff --git a/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/database_table.png b/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/database_table.png new file mode 100644 index 000000000..693709cbc Binary files /dev/null and b/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/database_table.png differ diff --git a/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/exclamation.png b/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/exclamation.png new file mode 100644 index 000000000..c37bd062e Binary files /dev/null and b/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/exclamation.png differ diff --git a/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/house.png b/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/house.png new file mode 100644 index 000000000..fed62219f Binary files /dev/null and b/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/house.png differ diff --git a/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/information.png b/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/information.png new file mode 100644 index 000000000..12cd1aef9 Binary files /dev/null and b/6.0.2/code/s2-quickstart/grails-app/assets/images/skin/information.png differ diff --git a/6.0.2/cover.png b/6.0.2/cover.png new file mode 100644 index 000000000..eb9a1f6df Binary files /dev/null and b/6.0.2/cover.png differ diff --git a/6.0.2/ghpages.html b/6.0.2/ghpages.html new file mode 100644 index 000000000..7977f54c3 --- /dev/null +++ b/6.0.2/ghpages.html @@ -0,0 +1,155 @@ + + + + + + +Grails Spring Security Core Plugin + + + + + + + + Fork me on GitHub + + +
+

Grails Spring Security Core Plugin

+ + + + + + + +
AuthorPuneet Behl
+ +
+ +

Spring Security Core Plugin - Documentation

+ + +

Grails 6.0.2 and beyond

+ + +

Grails 4.0.x and beyond

+ + +

Grails 3.3.x

+ + +

Grails 3.0.x, 3.1.x, 3.2.x

+ + +

Documentation (version 2.0.x)

+ + +
+ +
+ + + + + + +
+ +

Download Source

+

+ You can download this project in either + zip or + tar formats. +

+

You can also clone the project with Git by running: +

$ git clone git://github.com/grails/grails-spring-security-core
+

+ +
+ + + + diff --git a/6.0.2/groovydoc/allclasses-frame.html b/6.0.2/groovydoc/allclasses-frame.html new file mode 100644 index 000000000..b4eadbe67 --- /dev/null +++ b/6.0.2/groovydoc/allclasses-frame.html @@ -0,0 +1,116 @@ + + + + +All Classes + + + + + + + +

All Classes

+
+ +
+ + diff --git a/6.0.2/groovydoc/deprecated-list.html b/6.0.2/groovydoc/deprecated-list.html new file mode 100644 index 000000000..8b53102b2 --- /dev/null +++ b/6.0.2/groovydoc/deprecated-list.html @@ -0,0 +1,106 @@ + + + + + + + + Deprecated API (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + +
+

Deprecated API

+

Contents

+ +
+
+ + +
+ +
+ + + + + +
+ + + + + diff --git a/6.0.2/groovydoc/grails.plugin.springsecurity/CommandLineHelper.html b/6.0.2/groovydoc/grails.plugin.springsecurity/CommandLineHelper.html new file mode 100644 index 000000000..35481a4c4 --- /dev/null +++ b/6.0.2/groovydoc/grails.plugin.springsecurity/CommandLineHelper.html @@ -0,0 +1,340 @@ + + + + + + + + + + + CommandLineHelper (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity
+ +

[Groovy] Trait CommandLineHelper

+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails.plugin.springsecurity/S2CreatePersistentTokenCommand.html b/6.0.2/groovydoc/grails.plugin.springsecurity/S2CreatePersistentTokenCommand.html new file mode 100644 index 000000000..9a84d16fd --- /dev/null +++ b/6.0.2/groovydoc/grails.plugin.springsecurity/S2CreatePersistentTokenCommand.html @@ -0,0 +1,352 @@ + + + + + + + + + + + S2CreatePersistentTokenCommand (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity
+ +

[Groovy] Class S2CreatePersistentTokenCommand

+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails.plugin.springsecurity/S2CreateRoleHierarchyEntryCommand.html b/6.0.2/groovydoc/grails.plugin.springsecurity/S2CreateRoleHierarchyEntryCommand.html new file mode 100644 index 000000000..1e5bc91ad --- /dev/null +++ b/6.0.2/groovydoc/grails.plugin.springsecurity/S2CreateRoleHierarchyEntryCommand.html @@ -0,0 +1,351 @@ + + + + + + + + + + + S2CreateRoleHierarchyEntryCommand (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity
+ +

[Groovy] Class S2CreateRoleHierarchyEntryCommand

+
+
+ +
+ +
+ +
+
    +
  • + + + + + + + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        grails.build.logging.ConsoleLogger consoleLogger
        +
      +
    • +
    + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        booleanhandle()
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        @groovy.lang.Delegate +grails.build.logging.ConsoleLogger consoleLogger

        +

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        S2CreateRoleHierarchyEntryCommand()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        @java.lang.Override +boolean handle()

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails.plugin.springsecurity/S2QuickstartCommand.html b/6.0.2/groovydoc/grails.plugin.springsecurity/S2QuickstartCommand.html new file mode 100644 index 000000000..ee1c273bf --- /dev/null +++ b/6.0.2/groovydoc/grails.plugin.springsecurity/S2QuickstartCommand.html @@ -0,0 +1,412 @@ + + + + + + + + + + + S2QuickstartCommand (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity
+ +

[Groovy] Class S2QuickstartCommand

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    CommandLineHelper, grails.dev.commands.GrailsApplicationCommand, SkipBootstrap
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class S2QuickstartCommand
    +extends java.lang.Object
    +implements CommandLineHelper, grails.dev.commands.GrailsApplicationCommand, SkipBootstrap
    + +

    Creates domain classes and updates config settings for the Spring Security plugin. + Usage: ./gradlew runCommand "-Pargs=s2-quickstart [DOMAIN_CLASS_PACKAGE] [USER_CLASS_NAME] [ROLE_CLASS_NAME] [REQUEST_MAP_CLASS_NAME] --groupClassName=[GROUP_CLASS_NAME]" or + s2-quickstart --ui-only + + For Example: + 1. ./gradlew runCommand "-Pargs=s2-quickstart com.yourapp User Role --groupClassName=RoleGroup" + 2. ./gradlew runCommand "-Pargs=s2-quickstart com.yourapp Person Authority Requestmap" + 3. ./gradlew runCommand "-Pargs=s2-quickstart --uiOnly" + 4. ./gradlew runCommand "-Pargs=s2-quickstart com.yourapp User Role"

    Authors:
    Puneet Behl
    Since:
    6.0.0

    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +

      Field Summary

      +
        + + + + + + + + + + + + + + +
        Fields 
        ModifiersNameDescription
        static java.lang.String GORM_VERSION_THRESHOLD
        +
      +
    • + +
    + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + + + + + + +
        Properties 
        TypeName and description
        grails.build.logging.ConsoleLogger consoleLogger
        java.lang.String description
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      + +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        booleanhandle()
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        public static final java.lang.String GORM_VERSION_THRESHOLD

        +

        +
      • +
      + +
    • +
    + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        @groovy.lang.Delegate +grails.build.logging.ConsoleLogger consoleLogger

        +

        +
      • +
      + + +
        +
      • +

        java.lang.String description

        +

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        S2QuickstartCommand()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        @java.lang.Override +boolean handle()

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails.plugin.springsecurity/SkipBootstrap.html b/6.0.2/groovydoc/grails.plugin.springsecurity/SkipBootstrap.html new file mode 100644 index 000000000..cb82fb15a --- /dev/null +++ b/6.0.2/groovydoc/grails.plugin.springsecurity/SkipBootstrap.html @@ -0,0 +1,260 @@ + + + + + + + + + + + SkipBootstrap (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity
+ +

[Groovy] Trait SkipBootstrap

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.transform.Trait
    +trait SkipBootstrap
    +extends java.lang.Object
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        boolean skipBootstrap
        +
      +
    • +
    + + + + + + + + + +
      + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        boolean skipBootstrap

        +

        +
      • +
      + +
    • +
    + + + + + + + + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails.plugin.springsecurity/package-frame.html b/6.0.2/groovydoc/grails.plugin.springsecurity/package-frame.html new file mode 100644 index 000000000..bdc9431b8 --- /dev/null +++ b/6.0.2/groovydoc/grails.plugin.springsecurity/package-frame.html @@ -0,0 +1,66 @@ + + + + + grails.plugin.springsecurity + + + + + + + + + + +
+ grails.plugin.springsecurity +
+ + + + +
+

Traits

+ +
+ + + +
+

Classes

+ +
+ + + + + + + + + + diff --git a/6.0.2/groovydoc/grails.plugin.springsecurity/package-summary.html b/6.0.2/groovydoc/grails.plugin.springsecurity/package-summary.html new file mode 100644 index 000000000..cc69bfcef --- /dev/null +++ b/6.0.2/groovydoc/grails.plugin.springsecurity/package-summary.html @@ -0,0 +1,197 @@ + + + + + +grails.plugin.springsecurity (spring-security-core 6.0.2 API) + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + +
+

Package grails.plugin.springsecurity

+
+ + + +
+ + + +
+ +
+ + + +
+ +
+ + + + + + + +
+ + +
+ + + + + +
+ + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/Application.html b/6.0.2/groovydoc/grails/plugin/springsecurity/Application.html new file mode 100644 index 000000000..a86882db0 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/Application.html @@ -0,0 +1,322 @@ + + + + + + + + + + + Application (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity
+ +

[Groovy] Class Application

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class Application
    +extends grails.boot.config.GrailsAutoConfiguration
    + +

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +
        + + + + + + + + + + + +
        Inherited fields 
        Fields inherited from classFields
        class grails.boot.config.GrailsAutoConfiguration__$stMC
        +
      +
    • + +
    + + + + + + + + + + +
      +
    • +

      Constructor Summary

      +
        + + + + + + + + + + +
        Constructors 
        Constructor and description
        + Application + ()
        +
      +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        static voidmain(java.lang.String[] args)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class grails.boot.config.GrailsAutoConfigurationgrails.boot.config.GrailsAutoConfiguration#onShutdown(java.util.Map), grails.boot.config.GrailsAutoConfiguration#getConfig(), grails.boot.config.GrailsAutoConfiguration#getApplicationContext(), grails.boot.config.GrailsAutoConfiguration#getGrailsApplication(), grails.boot.config.GrailsAutoConfiguration#setApplicationContext(org.springframework.context.ApplicationContext), grails.boot.config.GrailsAutoConfiguration#doWithSpring(), grails.boot.config.GrailsAutoConfiguration#doWithDynamicMethods(), grails.boot.config.GrailsAutoConfiguration#doWithApplicationContext(), grails.boot.config.GrailsAutoConfiguration#onConfigChange(java.util.Map), grails.boot.config.GrailsAutoConfiguration#onStartup(java.util.Map), grails.boot.config.GrailsAutoConfiguration#grailsApplicationPostProcessor(), grails.boot.config.GrailsAutoConfiguration#packageNames(), grails.boot.config.GrailsAutoConfiguration#getMetaClass(), grails.boot.config.GrailsAutoConfiguration#setMetaClass(groovy.lang.MetaClass), grails.boot.config.GrailsAutoConfiguration#packages(), grails.boot.config.GrailsAutoConfiguration#classes(), grails.boot.config.GrailsAutoConfiguration#wait(long), grails.boot.config.GrailsAutoConfiguration#wait(long, int), grails.boot.config.GrailsAutoConfiguration#wait(), grails.boot.config.GrailsAutoConfiguration#equals(java.lang.Object), grails.boot.config.GrailsAutoConfiguration#toString(), grails.boot.config.GrailsAutoConfiguration#hashCode(), grails.boot.config.GrailsAutoConfiguration#getClass(), grails.boot.config.GrailsAutoConfiguration#notify(), grails.boot.config.GrailsAutoConfiguration#notifyAll(), grails.boot.config.GrailsAutoConfiguration#invokeMethod(java.lang.String, java.lang.Object), grails.boot.config.GrailsAutoConfiguration#getProperty(java.lang.String), grails.boot.config.GrailsAutoConfiguration#setProperty(java.lang.String, java.lang.Object)
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        Application()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        static void main(java.lang.String[] args)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/BeanTypeResolver.html b/6.0.2/groovydoc/grails/plugin/springsecurity/BeanTypeResolver.html new file mode 100644 index 000000000..14fb22d60 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/BeanTypeResolver.html @@ -0,0 +1,365 @@ + + + + + + + + + + + BeanTypeResolver (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity
+ +

[Groovy] Class BeanTypeResolver

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class BeanTypeResolver
    +extends java.lang.Object
    + +

    Used in doWithSpring to allow overriding of the class of individual Spring beans by setting a property in the config. + The property name syntax is beanName + 'BeanClass', so for example to override the type of the 'authoritiesMapper' + bean, add a property authoritiesMapperBeanClass = 'com.foo.Bar' or + authoritiesMapperBeanClass = com.foo.Bar. + + This is useful when a bean override retains all of the configuration options of the original and only the class is + different. Just overriding the class (ordinarily done with a bean post-processor) allows redefined beans to use new + or changed properties in future versions of the plugin.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +

      Field Summary

      +
        + + + + + + + + + + + + + + + + + + + + +
        Fields 
        ModifiersNameDescription
        protected groovy.util.ConfigObject conf
        protected grails.core.GrailsApplication grailsApplication
        +
      +
    • + +
    + + + + + + + + + + +
      +
    • +

      Constructor Summary

      +
        + + + + + + + + + + +
        Constructors 
        Constructor and description
        + BeanTypeResolver + (groovy.util.ConfigObject securityConfig, grails.core.GrailsApplication application)
        +
      +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        java.lang.ClassresolveType(java.lang.String beanName, java.lang.Class defaultType)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        protected groovy.util.ConfigObject conf

        +

        +
      • +
      + + +
        +
      • +

        protected grails.core.GrailsApplication grailsApplication

        +

        +
      • +
      + +
    • +
    + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        BeanTypeResolver(groovy.util.ConfigObject securityConfig, grails.core.GrailsApplication application)

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        java.lang.Class resolveType(java.lang.String beanName, java.lang.Class defaultType)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/ControllerMixin.html b/6.0.2/groovydoc/grails/plugin/springsecurity/ControllerMixin.html new file mode 100644 index 000000000..fefe6046e --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/ControllerMixin.html @@ -0,0 +1,291 @@ + + + + + + + + + + + ControllerMixin (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity
+ +

[Groovy] Trait ControllerMixin

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.transform.Trait
    +@grails.artefact.Enhances(value: ControllerArtefactHandler.TYPE)
    +trait ControllerMixin
    +extends java.lang.Object
    + +

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      + +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        java.lang.Object getAuthenticatedUser()

        +

        +
      • +
      + + +
        +
      • +

        java.lang.Object getPrincipal()

        +

        +
      • +
      + + +
        +
      • +

        boolean isLoggedIn()

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/InterceptedUrl.html b/6.0.2/groovydoc/grails/plugin/springsecurity/InterceptedUrl.html new file mode 100644 index 000000000..955c4386f --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/InterceptedUrl.html @@ -0,0 +1,397 @@ + + + + + + + + + + + InterceptedUrl (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity
+ +

[Groovy] Class InterceptedUrl

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.transform.EqualsAndHashCode(includes: pattern,httpMethod)
    +@groovy.transform.ToString(includeNames: true)
    +@groovy.transform.CompileStatic
    +class InterceptedUrl
    +extends java.lang.Object
    + +

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Properties 
        TypeName and description
        java.lang.Class<?> closureClass
        java.util.Collection<org.springframework.security.access.ConfigAttribute> configAttributes
        boolean filters
        org.springframework.http.HttpMethod httpMethod
        java.lang.Boolean https
        java.lang.String pattern
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      +
        + + + + + + + + + + + + + + + + + + +
        Constructors 
        Constructor and description
        + InterceptedUrl + (java.lang.String pattern, java.util.Collection<java.lang.String> tokens, org.springframework.http.HttpMethod httpMethod)
        + InterceptedUrl + (java.lang.String pattern, org.springframework.http.HttpMethod httpMethod, java.util.Collection<org.springframework.security.access.ConfigAttribute> configAttributes)
        + InterceptedUrl + (java.lang.String pattern, java.lang.Class<?> closureClass, org.springframework.http.HttpMethod httpMethod)
        +
      +
    • +
    + + + + +
      + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        java.lang.Class<?> closureClass

        +

        +
      • +
      + + +
        +
      • +

        java.util.Collection<org.springframework.security.access.ConfigAttribute> configAttributes

        +

        +
      • +
      + + +
        +
      • +

        boolean filters

        +

        +
      • +
      + + +
        +
      • +

        org.springframework.http.HttpMethod httpMethod

        +

        +
      • +
      + + +
        +
      • +

        java.lang.Boolean https

        +

        +
      • +
      + + +
        +
      • +

        java.lang.String pattern

        +

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        InterceptedUrl(java.lang.String pattern, java.util.Collection<java.lang.String> tokens, org.springframework.http.HttpMethod httpMethod)

        +

        +
      • +
      + + +
        +
      • +

        InterceptedUrl(java.lang.String pattern, org.springframework.http.HttpMethod httpMethod, java.util.Collection<org.springframework.security.access.ConfigAttribute> configAttributes)

        +

        +
      • +
      + + +
        +
      • +

        InterceptedUrl(java.lang.String pattern, java.lang.Class<?> closureClass, org.springframework.http.HttpMethod httpMethod)

        +

        +
      • +
      + +
    • +
    + + + + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/LoginController.html b/6.0.2/groovydoc/grails/plugin/springsecurity/LoginController.html new file mode 100644 index 000000000..dcfcc980a --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/LoginController.html @@ -0,0 +1,491 @@ + + + + + + + + + + + LoginController (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity
+ +

[Groovy] Class LoginController

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @Secured(value: permitAll)
    +class LoginController
    +extends java.lang.Object
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + +
        Properties 
        TypeName and description
        org.springframework.security.authentication.AuthenticationTrustResolver authenticationTrustResolver
        Dependency injection for the authenticationTrustResolver.
        org.springframework.context.MessageSource messageSource
        Dependency injection for the messageSource.
        java.lang.Object springSecurityService
        Dependency injection for the springSecurityService.
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      +
        + + + + + + + + + + +
        Constructors 
        Constructor and description
        + LoginController + ()
        +
      +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        java.lang.ObjectajaxDenied()
        The Ajax denied redirect url.
        java.lang.ObjectajaxSuccess()
        The Ajax success redirect url.
        java.lang.Objectauth()
        Show the login page.
        java.lang.ObjectauthAjax()
        The redirect action for Ajax requests.
        java.lang.Objectauthfail()
        Callback after a failed login.
        java.lang.Objectdenied()
        Show denied page.
        java.lang.Objectfull()
        Login page for users with a remember-me cookie but accessing a IS_AUTHENTICATED_FULLY page.
        protected org.springframework.security.core.AuthenticationgetAuthentication()
        protected groovy.util.ConfigObjectgetConf()
        java.lang.Objectindex()
        Default action; redirects to 'defaultTargetUrl' if logged in, /login/auth otherwise.
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        org.springframework.security.authentication.AuthenticationTrustResolver authenticationTrustResolver

        +

        Dependency injection for the authenticationTrustResolver.

        +
      • +
      + + +
        +
      • +

        org.springframework.context.MessageSource messageSource

        +

        Dependency injection for the messageSource.

        +
      • +
      + + +
        +
      • +

        java.lang.Object springSecurityService

        +

        Dependency injection for the springSecurityService.

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        LoginController()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        java.lang.Object ajaxDenied()

        +

        The Ajax denied redirect url.

        +
      • +
      + + +
        +
      • +

        java.lang.Object ajaxSuccess()

        +

        The Ajax success redirect url.

        +
      • +
      + + +
        +
      • +

        java.lang.Object auth()

        +

        Show the login page.

        +
      • +
      + + +
        +
      • +

        java.lang.Object authAjax()

        +

        The redirect action for Ajax requests.

        +
      • +
      + + +
        +
      • +

        java.lang.Object authfail()

        +

        Callback after a failed login. Redirects to the auth page with a warning message.

        +
      • +
      + + +
        +
      • +

        java.lang.Object denied()

        +

        Show denied page.

        +
      • +
      + + +
        +
      • +

        java.lang.Object full()

        +

        Login page for users with a remember-me cookie but accessing a IS_AUTHENTICATED_FULLY page.

        +
      • +
      + + +
        +
      • +

        protected org.springframework.security.core.Authentication getAuthentication()

        +

        +
      • +
      + + +
        +
      • +

        protected groovy.util.ConfigObject getConf()

        +

        +
      • +
      + + +
        +
      • +

        java.lang.Object index()

        +

        Default action; redirects to 'defaultTargetUrl' if logged in, /login/auth otherwise.

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/LogoutController.html b/6.0.2/groovydoc/grails/plugin/springsecurity/LogoutController.html new file mode 100644 index 000000000..d2b760a6a --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/LogoutController.html @@ -0,0 +1,339 @@ + + + + + + + + + + + LogoutController (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity
+ +

[Groovy] Class LogoutController

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @Secured(value: permitAll)
    +class LogoutController
    +extends java.lang.Object
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        org.springframework.security.web.RedirectStrategy redirectStrategy
        Dependency injection for RedirectStrategy.
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      +
        + + + + + + + + + + +
        Constructors 
        Constructor and description
        + LogoutController + ()
        +
      +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        java.lang.Objectindex()
        Index action.
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        org.springframework.security.web.RedirectStrategy redirectStrategy

        +

        Dependency injection for RedirectStrategy.

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        LogoutController()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        java.lang.Object index()

        +

        Index action. Redirects to the Spring security logout uri.

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/ReflectionUtils.html b/6.0.2/groovydoc/grails/plugin/springsecurity/ReflectionUtils.html new file mode 100644 index 000000000..9eca2ddbc --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/ReflectionUtils.html @@ -0,0 +1,551 @@ + + + + + + + + + + + ReflectionUtils (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity
+ +

[Groovy] Class ReflectionUtils

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.util.logging.Slf4j
    +class ReflectionUtils
    +extends java.lang.Object
    + +

    Helper methods that use dynamic Groovy.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + +
        Properties 
        TypeName and description
        static grails.core.GrailsApplication application
        java.lang.Object configProperty
        groovy.util.ConfigObject securityConfig
        +
      +
    • +
    + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        static java.util.ListasList(java.lang.Object o)
        static java.util.Collection<org.springframework.security.access.ConfigAttribute>buildConfigAttributes(java.util.Collection<java.lang.String> tokens, boolean expressions)
        static java.util.SortedMap<java.lang.Integer, java.lang.String>findFilterChainNames(groovy.util.ConfigObject conf)
        static java.lang.ObjectgetConfigProperty(java.lang.String name, java.lang.Object config)
        static java.lang.StringgetGrailsServerURL()
        static java.lang.ClassgetRequestMapClass()
        static java.lang.StringgetRequestmapConfigAttribute(java.lang.Object requestmap)
        static org.springframework.http.HttpMethodgetRequestmapHttpMethod(java.lang.Object requestmap)
        static java.lang.StringgetRequestmapUrl(java.lang.Object requestmap)
        static java.lang.StringgetRoleAuthority(java.lang.Object role)
        static groovy.util.ConfigObjectgetSecurityConfig()
        static java.util.ListloadAllRequestmaps()
        static grails.web.mapping.UrlMappingInfo[]matchAllUrlMappings(grails.web.mapping.UrlMappingsHolder urlMappingsHolder, java.lang.String requestUrl, org.grails.web.servlet.mvc.GrailsWebRequest grailsRequest, org.grails.web.mime.HttpServletResponseExtension extension)
        static booleanrequestmapClassSupportsHttpMethod()
        static voidsetConfigProperty(java.lang.String name, java.lang.Object value)
        static voidsetSecurityConfig(groovy.util.ConfigObject c)
        static java.util.List<InterceptedUrl>splitMap(java.util.List<java.util.Map<java.lang.String, java.lang.Object>> map)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        static grails.core.GrailsApplication application

        +

        +
      • +
      + + +
        +
      • +

        java.lang.Object configProperty

        +

        +
      • +
      + + +
        +
      • +

        groovy.util.ConfigObject securityConfig

        +

        +
      • +
      + +
    • +
    + + + + + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        static java.util.List asList(java.lang.Object o)

        +

        +
      • +
      + + +
        +
      • +

        static java.util.Collection<org.springframework.security.access.ConfigAttribute> buildConfigAttributes(java.util.Collection<java.lang.String> tokens, boolean expressions)

        +

        +
      • +
      + + +
        +
      • +

        static java.util.SortedMap<java.lang.Integer, java.lang.String> findFilterChainNames(groovy.util.ConfigObject conf)

        +

        +
      • +
      + + +
        +
      • +

        static java.lang.Object getConfigProperty(java.lang.String name, java.lang.Object config)

        +

        +
      • +
      + + +
        +
      • +

        static java.lang.String getGrailsServerURL()

        +

        +
      • +
      + + +
        +
      • +

        static java.lang.Class getRequestMapClass()

        +

        +
      • +
      + + +
        +
      • +

        static java.lang.String getRequestmapConfigAttribute(java.lang.Object requestmap)

        +

        +
      • +
      + + +
        +
      • +

        static org.springframework.http.HttpMethod getRequestmapHttpMethod(java.lang.Object requestmap)

        +

        +
      • +
      + + +
        +
      • +

        static java.lang.String getRequestmapUrl(java.lang.Object requestmap)

        +

        +
      • +
      + + +
        +
      • +

        static java.lang.String getRoleAuthority(java.lang.Object role)

        +

        +
      • +
      + + +
        +
      • +

        static groovy.util.ConfigObject getSecurityConfig()

        +

        +
      • +
      + + +
        +
      • +

        static java.util.List loadAllRequestmaps()

        +

        +
      • +
      + + +
        +
      • +

        static grails.web.mapping.UrlMappingInfo[] matchAllUrlMappings(grails.web.mapping.UrlMappingsHolder urlMappingsHolder, java.lang.String requestUrl, org.grails.web.servlet.mvc.GrailsWebRequest grailsRequest, org.grails.web.mime.HttpServletResponseExtension extension)

        +

        +
      • +
      + + +
        +
      • +

        static boolean requestmapClassSupportsHttpMethod()

        +

        +
      • +
      + + +
        +
      • +

        static void setConfigProperty(java.lang.String name, java.lang.Object value)

        +

        +
      • +
      + + +
        +
      • +

        static void setSecurityConfig(groovy.util.ConfigObject c)

        +

        +
      • +
      + + +
        +
      • +

        static java.util.List<InterceptedUrl> splitMap(java.util.List<java.util.Map<java.lang.String, java.lang.Object>> map)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/SecurityConfigType.html b/6.0.2/groovydoc/grails/plugin/springsecurity/SecurityConfigType.html new file mode 100644 index 000000000..a5793b045 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/SecurityConfigType.html @@ -0,0 +1,387 @@ + + + + + + + + + + + SecurityConfigType (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity
+ +

[Groovy] Enum SecurityConfigType

+
+
+ +
+
    +
  • + + + +
    +
    + +
    final enum SecurityConfigType
    +extends java.lang.Enum<E<E>>
    + +

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+ +
+ +
+
    +
  • + + + + + + + + + + + + + + + + + + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/SecurityEventListener.html b/6.0.2/groovydoc/grails/plugin/springsecurity/SecurityEventListener.html new file mode 100644 index 000000000..73560dc0a --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/SecurityEventListener.html @@ -0,0 +1,387 @@ + + + + + + + + + + + SecurityEventListener (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity
+ +

[Groovy] Class SecurityEventListener

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.context.ApplicationListener<org.springframework.context.ApplicationEvent>, org.springframework.context.ApplicationContextAware
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class SecurityEventListener
    +extends java.lang.Object
    +implements org.springframework.context.ApplicationListener<org.springframework.context.ApplicationEvent>, org.springframework.context.ApplicationContextAware
    + +

    Registers as an event listener and delegates handling of security-related events + to optional closures defined in Config.groovy. + + The following callbacks are supported:
    +

      +
    • onInteractiveAuthenticationSuccessEvent
    • +
    • onAbstractAuthenticationFailureEvent
    • +
    • onAuthenticationSuccessEvent
    • +
    • onAuthenticationSwitchUserEvent
    • +
    • onAuthorizationEvent
    • +
    + All callbacks are optional; you can implement just the ones you're interested in, e.g. +
    + grails {
    +    plugin {
    +       springsecurity {
    +          ...
    +          onAuthenticationSuccessEvent = { e, appCtx ->
    +             ...
    +          }
    +       }
    +    }
    + }
    + 
    + The event and the Spring context are provided in case you need to look up a Spring bean, + e.g. the Hibernate SessionFactory.
    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        org.springframework.context.ApplicationContext applicationContext
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      + +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        protected voidcall(org.springframework.context.ApplicationEvent e, java.lang.String closureName)
        voidonApplicationEvent(org.springframework.context.ApplicationEvent e)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        org.springframework.context.ApplicationContext applicationContext

        +

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        SecurityEventListener()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        @java.lang.SuppressWarnings(value: rawtypes) +protected void call(org.springframework.context.ApplicationEvent e, java.lang.String closureName)

        +

        +
      • +
      + + +
        +
      • +

        void onApplicationEvent(org.springframework.context.ApplicationEvent e)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/SecurityFilterPosition.html b/6.0.2/groovydoc/grails/plugin/springsecurity/SecurityFilterPosition.html new file mode 100644 index 000000000..47d9fb345 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/SecurityFilterPosition.html @@ -0,0 +1,709 @@ + + + + + + + + + + + SecurityFilterPosition (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity
+ +

[Groovy] Enum SecurityFilterPosition

+
+
+ +
+
    +
  • + + + +
    +
    + +
    final enum SecurityFilterPosition
    +extends java.lang.Enum<E<E>>
    + +

    Stores the default order numbers of all Spring Security filters for use in configuration. + + Equivalent to org.springframework.security.config.http.SecurityFilters which + unfortunately is package-default.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+ +
+ +
+ +
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/SecurityTagLib.html b/6.0.2/groovydoc/grails/plugin/springsecurity/SecurityTagLib.html new file mode 100644 index 000000000..9c970c075 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/SecurityTagLib.html @@ -0,0 +1,703 @@ + + + + + + + + + + + SecurityTagLib (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity
+ +

[Groovy] Class SecurityTagLib

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    grails.core.support.GrailsConfigurationAware
    +
    + + + +
    +
    + +
    class SecurityTagLib
    +extends java.lang.Object
    +implements grails.core.support.GrailsConfigurationAware
    + +

    Security tags.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +

      Field Summary

      +
        + + + + + + + + + + + + + + + + + + + + +
        Fields 
        ModifiersNameDescription
        protected static javax.servlet.FilterChain DUMMY_CHAIN
        protected java.util.Map<java.lang.String, org.springframework.expression.Expression> expressionCache
        +
      +
    • + +
    + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Properties 
        TypeName and description
        java.lang.Object access
        Renders the body if the specified expression (a String; the 'expression' attribute) + evaluates to true or if the specified URL is allowed.
        java.lang.Object ifAllGranted
        Renders the body if all of the specified roles are granted to the user.
        java.lang.Object ifAnyGranted
        Renders the body if any of the specified roles are granted to the user.
        java.lang.Object ifLoggedIn
        Renders the body if the user is authenticated.
        java.lang.Object ifNotGranted
        Renders the body if none of the specified roles are granted to the user.
        java.lang.Object ifNotLoggedIn
        Renders the body if the user is not authenticated.
        java.lang.Object ifNotSwitched
        Renders the body if the user is not authenticated as another user via run-as.
        java.lang.Object ifSwitched
        Renders the body if the user is authenticated as another user via run-as.
        java.lang.Object link
        Provides a wrapper around the standard Grails link tag g:link. +
        java.lang.Object loggedInUserInfo
        Renders a property (specified by the 'field' attribute) from the principal.
        static java.lang.Object namespace
        java.lang.Object noAccess
        Renders the body if the specified expression (a String; the 'expression' attribute) + evaluates to false or if the specified URL is not allowed.
        java.lang.String serverContextPath
        java.lang.Object springSecurityService
        Dependency injection for springSecurityService.
        java.lang.Object switchedUserOriginalUsername
        Renders the username of the 'real' authentication when authenticated as another user via run-as.
        java.lang.Object username
        Renders the user's username if logged in.
        org.springframework.security.access.expression.SecurityExpressionHandler webExpressionHandler
        Dependency injection for webExpressionHandler.
        org.springframework.security.web.access.WebInvocationPrivilegeEvaluator webInvocationPrivilegeEvaluator
        Dependency injection for webInvocationPrivilegeEvaluator.
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      +
        + + + + + + + + + + +
        Constructors 
        Constructor and description
        + SecurityTagLib + ()
        +
      +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        protected java.lang.ObjectassertAttribute(java.lang.String name, java.lang.Object attrs, java.lang.String tag)
        protected java.lang.ObjectdetermineSource()
        protected org.springframework.expression.ExpressionfindOrCreateExpression(java.lang.String text)
        protected booleanhasAccess(java.lang.Object attrs, java.lang.String tagName)
        protected booleanisFallback(java.lang.Object attrs)
        voidsetConfiguration(grails.config.Config co)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        protected static final javax.servlet.FilterChain DUMMY_CHAIN

        +

        +
      • +
      + + +
        +
      • +

        protected java.util.Map<java.lang.String, org.springframework.expression.Expression> expressionCache

        +

        +
      • +
      + +
    • +
    + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        java.lang.Object access

        +

        Renders the body if the specified expression (a String; the 'expression' attribute) + evaluates to true or if the specified URL is allowed.

        attr:
        expression the expression to evaluate
        attr:
        url the URL to check
        attr:
        method the method of the URL, defaults to 'GET'

        +
      • +
      + + +
        +
      • +

        java.lang.Object ifAllGranted

        +

        Renders the body if all of the specified roles are granted to the user. Roles are + specified in the 'roles' attribute which is a comma-delimited string.

        attr:
        roles REQUIRED the role name(s)

        +
      • +
      + + +
        +
      • +

        java.lang.Object ifAnyGranted

        +

        Renders the body if any of the specified roles are granted to the user. Roles are + specified in the 'roles' attribute which is a comma-delimited string.

        attr:
        roles REQUIRED the role name(s)

        +
      • +
      + + +
        +
      • +

        java.lang.Object ifLoggedIn

        +

        Renders the body if the user is authenticated.

        +
      • +
      + + +
        +
      • +

        java.lang.Object ifNotGranted

        +

        Renders the body if none of the specified roles are granted to the user. Roles are + specified in the 'roles' attribute which is a comma-delimited string.

        attr:
        roles REQUIRED the role name(s)

        +
      • +
      + + +
        +
      • +

        java.lang.Object ifNotLoggedIn

        +

        Renders the body if the user is not authenticated.

        +
      • +
      + + +
        +
      • +

        java.lang.Object ifNotSwitched

        +

        Renders the body if the user is not authenticated as another user via run-as.

        +
      • +
      + + +
        +
      • +

        java.lang.Object ifSwitched

        +

        Renders the body if the user is authenticated as another user via run-as.

        +
      • +
      + + +
        +
      • +

        java.lang.Object link

        +

        Provides a wrapper around the standard Grails link tag g:link. + Renders the link if the user has access to the specified URL.

        +
      • +
      + + +
        +
      • +

        java.lang.Object loggedInUserInfo

        +

        Renders a property (specified by the 'field' attribute) from the principal.

        attr:
        field REQUIRED the field name

        +
      • +
      + + +
        +
      • +

        static java.lang.Object namespace

        +

        +
      • +
      + + +
        +
      • +

        java.lang.Object noAccess

        +

        Renders the body if the specified expression (a String; the 'expression' attribute) + evaluates to false or if the specified URL is not allowed.

        attr:
        expression the expression to evaluate
        attr:
        url the URL to check
        attr:
        method the method of the URL, defaults to 'GET'

        +
      • +
      + + +
        +
      • +

        java.lang.String serverContextPath

        +

        +
      • +
      + + +
        +
      • +

        java.lang.Object springSecurityService

        +

        Dependency injection for springSecurityService.

        +
      • +
      + + +
        +
      • +

        java.lang.Object switchedUserOriginalUsername

        +

        Renders the username of the 'real' authentication when authenticated as another user via run-as.

        +
      • +
      + + +
        +
      • +

        java.lang.Object username

        +

        Renders the user's username if logged in.

        +
      • +
      + + +
        +
      • +

        org.springframework.security.access.expression.SecurityExpressionHandler webExpressionHandler

        +

        Dependency injection for webExpressionHandler.

        +
      • +
      + + +
        +
      • +

        org.springframework.security.web.access.WebInvocationPrivilegeEvaluator webInvocationPrivilegeEvaluator

        +

        Dependency injection for webInvocationPrivilegeEvaluator.

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        SecurityTagLib()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        protected java.lang.Object assertAttribute(java.lang.String name, java.lang.Object attrs, java.lang.String tag)

        +

        +
      • +
      + + +
        +
      • +

        protected java.lang.Object determineSource()

        +

        +
      • +
      + + +
        +
      • +

        protected org.springframework.expression.Expression findOrCreateExpression(java.lang.String text)

        +

        +
      • +
      + + +
        +
      • +

        protected boolean hasAccess(java.lang.Object attrs, java.lang.String tagName)

        +

        +
      • +
      + + +
        +
      • +

        protected boolean isFallback(java.lang.Object attrs)

        +

        +
      • +
      + + +
        +
      • +

        @java.lang.Override +void setConfiguration(grails.config.Config co)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/SpringSecurityBeanFactoryPostProcessor.html b/6.0.2/groovydoc/grails/plugin/springsecurity/SpringSecurityBeanFactoryPostProcessor.html new file mode 100644 index 000000000..26c4ffc23 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/SpringSecurityBeanFactoryPostProcessor.html @@ -0,0 +1,394 @@ + + + + + + + + + + + SpringSecurityBeanFactoryPostProcessor (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity
+ +

[Groovy] Class SpringSecurityBeanFactoryPostProcessor

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.beans.factory.config.BeanFactoryPostProcessor
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class SpringSecurityBeanFactoryPostProcessor
    +extends java.lang.Object
    +implements org.springframework.beans.factory.config.BeanFactoryPostProcessor
    + +

    Unregisters auto-config beans registered by Boot.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +

      Field Summary

      + +
    • + +
    + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        protected voiddisableFilterRegistrationBeans(org.springframework.beans.factory.support.BeanDefinitionRegistry beanFactory)
        Need to add a FilterRegistrationBean with enabled set to false to prevent Boot from + registering all of the filters in the filterchains again as regular filters.
        voidpostProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
        protected voidremoveAutoconfigBeans(org.springframework.beans.factory.support.BeanDefinitionRegistry beanFactory)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        protected static final java.lang.String AUTOCONFIG_NAME

        +

        +
      • +
      + + +
        +
      • +

        protected static final java.lang.String SECURITY_PROPERTIES_NAME

        +

        +
      • +
      + +
    • +
    + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        SpringSecurityBeanFactoryPostProcessor()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        protected void disableFilterRegistrationBeans(org.springframework.beans.factory.support.BeanDefinitionRegistry beanFactory)

        +

        Need to add a FilterRegistrationBean with enabled set to false to prevent Boot from + registering all of the filters in the filterchains again as regular filters.

        +
      • +
      + + +
        +
      • +

        void postProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)

        +

        +
      • +
      + + +
        +
      • +

        protected void removeAutoconfigBeans(org.springframework.beans.factory.support.BeanDefinitionRegistry beanFactory)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/SpringSecurityCoreGrailsPlugin.html b/6.0.2/groovydoc/grails/plugin/springsecurity/SpringSecurityCoreGrailsPlugin.html new file mode 100644 index 000000000..171691341 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/SpringSecurityCoreGrailsPlugin.html @@ -0,0 +1,738 @@ + + + + + + + + + + + SpringSecurityCoreGrailsPlugin (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity
+ +

[Groovy] Class SpringSecurityCoreGrailsPlugin

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.util.logging.Slf4j
    +class SpringSecurityCoreGrailsPlugin
    +extends grails.plugins.Plugin
    + +

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voiddoWithApplicationContext()
        groovy.lang.ClosuredoWithSpring()
        static java.util.Map<java.lang.String, org.springframework.security.crypto.password.PasswordEncoder>idToPasswordEncoder(groovy.util.ConfigObject conf)
        voidonChange(java.util.Map<java.lang.String, java.lang.Object> event)
        voidonConfigChange(java.util.Map<java.lang.String, java.lang.Object> event)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class grails.plugins.Plugingrails.plugins.Plugin#onShutdown(java.util.Map), grails.plugins.Plugin#getPluginManager(), grails.plugins.Plugin#getEnabled(), grails.plugins.Plugin#getEnvironment(), grails.plugins.Plugin#setEnvironment(grails.util.Environment), grails.plugins.Plugin#getPlugin(), grails.plugins.Plugin#onChange(java.util.Map), grails.plugins.Plugin#getConfig(), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getGrailsApplication(), grails.plugins.Plugin#setApplicationContext(org.springframework.context.ApplicationContext), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#onConfigChange(java.util.Map), grails.plugins.Plugin#onStartup(java.util.Map), grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#setGrailsApplication(grails.core.GrailsApplication), grails.plugins.Plugin#setPlugin(grails.plugins.GrailsPlugin), grails.plugins.Plugin#setPluginManager(grails.plugins.GrailsPluginManager), grails.plugins.Plugin#isEnabled(), grails.plugins.Plugin#setEnabled(boolean), grails.plugins.Plugin#getManager(), grails.plugins.Plugin#getMetaClass(), grails.plugins.Plugin#setMetaClass(groovy.lang.MetaClass), grails.plugins.Plugin#wait(long), grails.plugins.Plugin#wait(long, int), grails.plugins.Plugin#wait(), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#toString(), grails.plugins.Plugin#hashCode(), grails.plugins.Plugin#getClass(), grails.plugins.Plugin#notify(), grails.plugins.Plugin#notifyAll(), grails.plugins.Plugin#invokeMethod(java.lang.String, java.lang.Object), grails.plugins.Plugin#getProperty(java.lang.String), grails.plugins.Plugin#setProperty(java.lang.String, java.lang.Object)
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        public static final java.lang.String ENCODING_IDSHA256

        +

        +
      • +
      + + +
        +
      • +

        public static final java.lang.String ENCODING_ID_ARGON2

        +

        +
      • +
      + + +
        +
      • +

        public static final java.lang.String ENCODING_ID_BCRYPT

        +

        +
      • +
      + + +
        +
      • +

        public static final java.lang.String ENCODING_ID_LDAP

        +

        +
      • +
      + + +
        +
      • +

        public static final java.lang.String ENCODING_ID_MD4

        +

        +
      • +
      + + +
        +
      • +

        public static final java.lang.String ENCODING_ID_MD5

        +

        +
      • +
      + + +
        +
      • +

        public static final java.lang.String ENCODING_ID_NOOP

        +

        +
      • +
      + + +
        +
      • +

        public static final java.lang.String ENCODING_ID_PBKDF2

        +

        +
      • +
      + + +
        +
      • +

        public static final java.lang.String ENCODING_ID_SCRYPT

        +

        +
      • +
      + + +
        +
      • +

        public static final java.lang.String ENCODING_ID_SHA1

        +

        +
      • +
      + +
    • +
    + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        java.lang.String author

        +

        +
      • +
      + + +
        +
      • +

        java.lang.String authorEmail

        +

        +
      • +
      + + +
        +
      • +

        java.lang.String description

        +

        +
      • +
      + + +
        +
      • +

        java.lang.String documentation

        +

        +
      • +
      + + +
        +
      • +

        java.lang.String grailsVersion

        +

        +
      • +
      + + +
        +
      • +

        java.lang.Object issueManagement

        +

        +
      • +
      + + +
        +
      • +

        java.lang.String license

        +

        +
      • +
      + + +
        +
      • +

        java.util.List loadAfter

        +

        +
      • +
      + + +
        +
      • +

        java.util.List observe

        +

        +
      • +
      + + +
        +
      • +

        java.lang.Object organization

        +

        +
      • +
      + + +
        +
      • +

        java.lang.Object profiles

        +

        +
      • +
      + + +
        +
      • +

        java.lang.Object scm

        +

        +
      • +
      + + +
        +
      • +

        java.lang.String title

        +

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        SpringSecurityCoreGrailsPlugin()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        void doWithApplicationContext()

        +

        +
      • +
      + + +
        +
      • +

        groovy.lang.Closure doWithSpring()

        +

        +
      • +
      + + +
        +
      • +

        static java.util.Map<java.lang.String, org.springframework.security.crypto.password.PasswordEncoder> idToPasswordEncoder(groovy.util.ConfigObject conf)

        +

        +
      • +
      + + +
        +
      • +

        void onChange(java.util.Map<java.lang.String, java.lang.Object> event)

        +

        +
      • +
      + + +
        +
      • +

        void onConfigChange(java.util.Map<java.lang.String, java.lang.Object> event)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/SpringSecurityService.html b/6.0.2/groovydoc/grails/plugin/springsecurity/SpringSecurityService.html new file mode 100644 index 000000000..6dcdcdc23 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/SpringSecurityService.html @@ -0,0 +1,697 @@ + + + + + + + + + + + SpringSecurityService (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity
+ +

[Groovy] Class SpringSecurityService

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.util.logging.Slf4j
    +class SpringSecurityService
    +extends java.lang.Object
    + +

    Utility methods.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +

      Field Summary

      +
        + + + + + + + + + + + + + + +
        Fields 
        ModifiersNameDescription
        protected static java.util.List<java.lang.String> NO_SALT
        +
      +
    • + +
    + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Properties 
        TypeName and description
        org.springframework.security.authentication.AuthenticationTrustResolver authenticationTrustResolver
        dependency injection for authenticationTrustResolver
        grails.core.GrailsApplication grailsApplication
        dependency injection for grailsApplication
        java.lang.Object objectDefinitionSource
        dependency injection for org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource
        java.lang.Object passwordEncoder
        dependency injection for the password encoder
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      + +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voidclearCachedRequestmaps()
        Call when editing, creating, or deleting a Requestmap to flush the cached + configuration and rebuild using the most recent data.
        voidcreateRequestMaps(java.util.List<java.util.Map<java.lang.String, java.lang.Object>> data)
        Create multiple requestmap instances in a transaction.
        voidcreateRequestMaps(java.util.List<java.lang.String> urls, java.lang.String configAttribute)
        Create multiple requestmap instances in a transaction that all share the same configAttribute.
        voiddeleteRole(java.lang.Object role)
        Delete a role, and if Requestmap class is used to store roles, remove the role + from all Requestmap definitions.
        java.lang.StringencodePassword(java.lang.String password)
        Encode the password using the configured PasswordEncoder.
        protected java.util.ListfindRequestmapsByRole(java.lang.String roleName, java.lang.Object conf)
        org.springframework.security.core.AuthenticationgetAuthentication()
        Get the currently logged in user's Authentication.
        protected java.lang.Class<?>getClassForName(java.lang.String name)
        java.lang.ObjectgetCurrentUser()
        Get the domain class instance associated with the current authentication.
        java.lang.ObjectgetCurrentUserId()
        java.lang.ObjectgetPrincipal()
        Get the currently logged in user's principal.
        protected groovy.util.ConfigObjectgetSecurityConfig()
        booleanisAjax(javax.servlet.http.HttpServletRequest request)
        Check if the request was triggered by an Ajax call.
        booleanisLoggedIn()
        Quick check to see if the current user is logged in.
        java.lang.ObjectloadCurrentUser()
        Get a proxy for the domain class instance associated with the current authentication.
        voidreauthenticate(java.lang.String username, java.lang.String password)
        Rebuild an Authentication for the given username and register it in the security context. +
        voidreloadDBRoleHierarchy()
        Call for reloading the role hierarchy configuration from the database.
        booleanupdateRole(java.lang.Object role, java.lang.Object newProperties)
        Update a role, and if Requestmap class is used to store roles, replace the new role + name in all Requestmap definitions that use it if the name was changed.
        protected booleanuseRequestmaps()
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        protected static final java.util.List<java.lang.String> NO_SALT

        +

        +
      • +
      + +
    • +
    + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        org.springframework.security.authentication.AuthenticationTrustResolver authenticationTrustResolver

        +

        dependency injection for authenticationTrustResolver

        +
      • +
      + + +
        +
      • +

        grails.core.GrailsApplication grailsApplication

        +

        dependency injection for grailsApplication

        +
      • +
      + + +
        +
      • +

        java.lang.Object objectDefinitionSource

        +

        dependency injection for org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource

        +
      • +
      + + +
        +
      • +

        java.lang.Object passwordEncoder

        +

        dependency injection for the password encoder

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        SpringSecurityService()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        void clearCachedRequestmaps()

        +

        Call when editing, creating, or deleting a Requestmap to flush the cached + configuration and rebuild using the most recent data.

        +
      • +
      + + +
        +
      • +

        @grails.gorm.transactions.Transactional +void createRequestMaps(java.util.List<java.util.Map<java.lang.String, java.lang.Object>> data)

        +

        Create multiple requestmap instances in a transaction.

        Parameters:
        data + - a list of maps where each map contains the data for one instance + (configAttribute and url are required, httpMethod is optional)

        +
      • +
      + + +
        +
      • +

        @grails.gorm.transactions.Transactional +void createRequestMaps(java.util.List<java.lang.String> urls, java.lang.String configAttribute)

        +

        Create multiple requestmap instances in a transaction that all share the same configAttribute.

        Parameters:
        urls - a list of url patterns

        +
      • +
      + + +
        +
      • +

        @grails.gorm.transactions.Transactional +void deleteRole(java.lang.Object role)

        +

        Delete a role, and if Requestmap class is used to store roles, remove the role + from all Requestmap definitions. If a Requestmap's config attribute is this role, + it will be deleted.

        Parameters:
        role - the role to delete

        +
      • +
      + + +
        +
      • +

        java.lang.String encodePassword(java.lang.String password)

        +

        Encode the password using the configured PasswordEncoder.

        +
      • +
      + + +
        +
      • +

        protected java.util.List findRequestmapsByRole(java.lang.String roleName, java.lang.Object conf)

        +

        +
      • +
      + + +
        +
      • +

        org.springframework.security.core.Authentication getAuthentication()

        +

        Get the currently logged in user's Authentication. If not authenticated + and the AnonymousAuthenticationFilter is active (true by default) then the anonymous + user's auth will be returned (AnonymousAuthenticationToken with username 'anonymousUser' + unless overridden).

        Returns:
        the authentication

        +
      • +
      + + +
        +
      • +

        protected java.lang.Class<?> getClassForName(java.lang.String name)

        +

        +
      • +
      + + +
        +
      • +

        java.lang.Object getCurrentUser()

        +

        Get the domain class instance associated with the current authentication.

        Returns:
        the user

        +
      • +
      + + +
        +
      • +

        java.lang.Object getCurrentUserId()

        +

        +
      • +
      + + +
        +
      • +

        java.lang.Object getPrincipal()

        +

        Get the currently logged in user's principal. If not authenticated and the + AnonymousAuthenticationFilter is active (true by default) then the anonymous + user's name will be returned ('anonymousUser' unless overridden).

        Returns:
        the principal

        +
      • +
      + + +
        +
      • +

        protected groovy.util.ConfigObject getSecurityConfig()

        +

        +
      • +
      + + +
        +
      • +

        boolean isAjax(javax.servlet.http.HttpServletRequest request)

        +

        Check if the request was triggered by an Ajax call.

        Parameters:
        request - the request
        Returns:
        true if Ajax

        +
      • +
      + + +
        +
      • +

        boolean isLoggedIn()

        +

        Quick check to see if the current user is logged in.

        Returns:
        true if the user is authenticated and not anonymous

        +
      • +
      + + +
        +
      • +

        java.lang.Object loadCurrentUser()

        +

        Get a proxy for the domain class instance associated with the current authentication. Use this when you + want the user only for its id, e.g. as a proxy for the foreign key in queries like "CreditCard.findAllByUser(user)"

        Returns:
        the proxy

        +
      • +
      + + +
        +
      • +

        void reauthenticate(java.lang.String username, java.lang.String password)

        +

        Rebuild an Authentication for the given username and register it in the security context. + Typically used after updating a user's authorities or other auth-cached info. +

        + Also removes the user from the user cache to force a refresh at next login.

        Parameters:
        username - the user's login name
        password - optional

        +
      • +
      + + +
        +
      • +

        void reloadDBRoleHierarchy()

        +

        Call for reloading the role hierarchy configuration from the database.

        Authors:
        fpape

        +
      • +
      + + +
        +
      • +

        @grails.gorm.transactions.Transactional +boolean updateRole(java.lang.Object role, java.lang.Object newProperties)

        +

        Update a role, and if Requestmap class is used to store roles, replace the new role + name in all Requestmap definitions that use it if the name was changed.

        Parameters:
        role - the role to update
        newProperties - the new role attributes ('params' from the calling controller)

        +
      • +
      + + +
        +
      • +

        protected boolean useRequestmaps()

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/SpringSecurityUtils.html b/6.0.2/groovydoc/grails/plugin/springsecurity/SpringSecurityUtils.html new file mode 100644 index 000000000..9314d4d8d --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/SpringSecurityUtils.html @@ -0,0 +1,1060 @@ + + + + + + + + + + + SpringSecurityUtils (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity
+ +

[Groovy] Class SpringSecurityUtils

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +@groovy.util.logging.Slf4j
    +final class SpringSecurityUtils
    +extends java.lang.Object
    + +

    Helper methods.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +

      Field Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        ModifiersNameDescription
        static java.lang.String AJAX_HEADERDefault value for the name of the Ajax header.
        static java.lang.String DEFAULT_TARGET_PARAMETER
        static java.lang.String FILTERS_NONE
        static java.lang.String NO_ROLEUsed to ensure that all authenticated users have at least one granted authority to work + around Spring Security code that assumes at least one.
        static java.lang.String SAVED_REQUEST
        static java.lang.String SPRING_SECURITY_LAST_USERNAME_KEY
        static java.lang.String XML_HTTP_REQUEST
        +
      +
    • + +
    + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Properties 
        TypeName and description
        static java.util.List<java.lang.String> afterInvocationManagerProviderNames
        AfterInvocationProvider names.
        static java.util.SortedMap<java.lang.Integer, javax.servlet.Filter> configuredOrderedFilters
        Set by SpringSecurityCoreGrailsPlugin contains the actual filter beans in order.
        static java.util.List<java.lang.String> logoutHandlerNames
        Logout handler names.
        static java.util.Map<java.lang.Integer, java.lang.String> orderedFilters
        Ordered filter names.
        static java.util.List<java.lang.String> providerNames
        Authentication provider names.
        groovy.util.ConfigObject securityConfig
        static java.util.List<java.lang.String> voterNames
        Voter names.
        +
      +
    • +
    + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        static java.util.Set<java.lang.String>authoritiesToRoles(java.lang.Object authorities)
        Extract the role names from authorities.
        static voidbuildFilterChains(java.util.SortedMap<java.lang.Integer, java.lang.String> filterNames, java.util.List<java.util.Map<java.lang.String, ?>> chainMap, java.util.List<GrailsSecurityFilterChain> filterChains, org.springframework.context.ApplicationContext applicationContext)
        static voidclientRegisterFilter(java.lang.String beanName, SecurityFilterPosition position)
        Register a filter in a specified position in the chain.
        static voidclientRegisterFilter(java.lang.String beanName, int order)
        Register a filter in a specified position in the chain.
        static java.lang.ObjectdoWithAuth(groovy.lang.Closure<?> closure)
        Execute a closure with the current authentication.
        static java.lang.ObjectdoWithAuth(java.lang.String username, groovy.lang.Closure<?> closure)
        Authenticate as the specified user and execute the closure with that authentication.
        static java.util.SortedMap<java.lang.Integer, java.lang.String>findFilterChainNames(java.lang.Object filterChainFilterNames, boolean useSecureChannel, boolean useIpRestrictions, boolean useX509, boolean useDigestAuth, boolean useBasicAuth, boolean useSwitchUserFilter)
        static java.lang.ThrowablegetLastException(javax.servlet.http.HttpSession session)
        Get the last auth exception.
        static java.lang.StringgetLastUsername(javax.servlet.http.HttpSession session)
        Get the last attempted username.
        static java.util.Collection<org.springframework.security.core.GrantedAuthority>getPrincipalAuthorities()
        Get the current user's authorities.
        static org.springframework.security.web.savedrequest.SavedRequestgetSavedRequest(javax.servlet.http.HttpSession session)
        Get the saved request from the session.
        static groovy.util.ConfigObjectgetSecurityConfig()
        Parse and load the security configuration.
        static java.lang.StringgetSecurityConfigType()
        Lookup the security type as a String to avoid dev mode reload issues.
        static org.springframework.security.core.context.SecurityContextgetSecurityContext(javax.servlet.http.HttpSession session)
        static java.lang.StringgetSwitchedUserOriginalUsername()
        Get the username of the original user before switching to another.
        static booleanifAllGranted(java.lang.String roles)
        Check if the current user has all of the specified roles.
        static booleanifAllGranted(java.util.Collection<? extends org.springframework.security.core.GrantedAuthority> roles)
        static booleanifAnyGranted(java.lang.String roles)
        Check if the current user has any of the specified roles.
        static booleanifAnyGranted(java.util.Collection<? extends org.springframework.security.core.GrantedAuthority> roles)
        static booleanifNotGranted(java.lang.String roles)
        Check if the current user has none of the specified roles.
        static booleanifNotGranted(java.util.Collection<? extends org.springframework.security.core.GrantedAuthority> roles)
        static booleanisAjax(javax.servlet.http.HttpServletRequest request)
        Check if the request was triggered by an Ajax call.
        static booleanisSwitched()
        Check if the current user is switched to another user.
        static voidloadSecondaryConfig(java.lang.String className)
        Allow a secondary plugin to add config attributes.
        static booleannoFilterIsApplied(java.util.List<java.util.Map<java.lang.String, ?>> chainMap, java.lang.String pattern)
        static java.util.List<org.springframework.security.core.GrantedAuthority>parseAuthoritiesString(java.lang.String roleNames)
        Split the role names and create org.springframework.security.core.GrantedAuthoritys for each.
        static voidreauthenticate(java.lang.String username, java.lang.String password)
        Rebuild an Authentication for the given username and register it in the security context. +
        static voidregisterAfterInvocationProvider(java.lang.String beanName)
        Register an AfterInvocationProvider bean name.
        static voidregisterFilter(java.lang.String beanName, SecurityFilterPosition position)
        Register a filter bean name in a specified position in the chain.
        static voidregisterFilter(java.lang.String beanName, int order)
        Register a filter bean name in a specified position in the chain.
        static voidregisterLogoutHandler(java.lang.String beanName)
        Register a logout handler bean name.
        static voidregisterProvider(java.lang.String beanName)
        Register a provider bean name.
        static voidregisterVoter(java.lang.String beanName)
        Register a voter bean name.
        static voidreloadSecurityConfig()
        Force a reload of the security configuration.
        static voidresetSecurityConfig()
        Reset the config for testing or after a dev mode Config.groovy change.
        static java.util.Set<java.lang.String>retainAll(java.lang.Object granted, java.lang.Object required)
        Find authorities in granted that are also in required.
        static voidsetApplication(grails.core.GrailsApplication app)
        Set at startup by plugin.
        static voidsetSecurityConfig(groovy.util.ConfigObject config)
        For testing only.
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        public static final java.lang.String AJAX_HEADER

        +

        Default value for the name of the Ajax header.

        +
      • +
      + + +
        +
      • +

        public static final java.lang.String DEFAULT_TARGET_PARAMETER

        +

        +
      • +
      + + +
        +
      • +

        public static final java.lang.String FILTERS_NONE

        +

        +
      • +
      + + +
        +
      • +

        public static final java.lang.String NO_ROLE

        +

        Used to ensure that all authenticated users have at least one granted authority to work + around Spring Security code that assumes at least one. By granting this non-authority, + the user can't do anything but gets past the somewhat arbitrary restrictions.

        +
      • +
      + + +
        +
      • +

        public static final java.lang.String SAVED_REQUEST

        +

        +
      • +
      + + +
        +
      • +

        public static final java.lang.String SPRING_SECURITY_LAST_USERNAME_KEY

        +

        +
      • +
      + + +
        +
      • +

        public static final java.lang.String XML_HTTP_REQUEST

        +

        +
      • +
      + +
    • +
    + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        static java.util.List<java.lang.String> afterInvocationManagerProviderNames

        +

        AfterInvocationProvider names. Plugins add or remove them, and can be overridden by config.

        +
      • +
      + + +
        +
      • +

        static java.util.SortedMap<java.lang.Integer, javax.servlet.Filter> configuredOrderedFilters

        +

        Set by SpringSecurityCoreGrailsPlugin contains the actual filter beans in order.

        +
      • +
      + + +
        +
      • +

        static java.util.List<java.lang.String> logoutHandlerNames

        +

        Logout handler names. Plugins add or remove them, and can be overridden by config.

        +
      • +
      + + +
        +
      • +

        static java.util.Map<java.lang.Integer, java.lang.String> orderedFilters

        +

        Ordered filter names. Plugins add or remove them, and can be overridden by config.

        +
      • +
      + + +
        +
      • +

        static java.util.List<java.lang.String> providerNames

        +

        Authentication provider names. Plugins add or remove them, and can be overridden by config.

        +
      • +
      + + +
        +
      • +

        groovy.util.ConfigObject securityConfig

        +

        +
      • +
      + + +
        +
      • +

        static java.util.List<java.lang.String> voterNames

        +

        Voter names. Plugins add or remove them and can be overridden by config.

        +
      • +
      + +
    • +
    + + + + + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        static java.util.Set<java.lang.String> authoritiesToRoles(java.lang.Object authorities)

        +

        Extract the role names from authorities.

        Parameters:
        authorities - the authorities (a collection or array of org.springframework.security.core.GrantedAuthority).
        Returns:
        the names

        +
      • +
      + + +
        +
      • +

        static void buildFilterChains(java.util.SortedMap<java.lang.Integer, java.lang.String> filterNames, java.util.List<java.util.Map<java.lang.String, ?>> chainMap, java.util.List<GrailsSecurityFilterChain> filterChains, org.springframework.context.ApplicationContext applicationContext)

        +

        +
      • +
      + + +
        +
      • +

        static void clientRegisterFilter(java.lang.String beanName, SecurityFilterPosition position)

        +

        Register a filter in a specified position in the chain. + + Note - this is for use in application code after the plugin has initialized, + e.g. in BootStrap where you want to register a custom filter in the correct + order without dealing with the existing configured filters.

        Parameters:
        beanName - the Spring bean name of the filter
        position - the position

        +
      • +
      + + +
        +
      • +

        @java.lang.SuppressWarnings(value: deprecation) +static void clientRegisterFilter(java.lang.String beanName, int order)

        +

        Register a filter in a specified position in the chain. + + Note - this is for use in application code after the plugin has initialized, + e.g. in BootStrap where you want to register a custom filter in the correct + order without dealing with the existing configured filters.

        Parameters:
        beanName - the Spring bean name of the filter
        order - the position (see SecurityFilterPosition)

        +
      • +
      + + +
        +
      • +

        static java.lang.Object doWithAuth(groovy.lang.Closure<?> closure)

        +

        Execute a closure with the current authentication. Assumes that there's an authentication in the + http session and that the closure is running in a separate thread from the web request, so the + context and authentication aren't available to the standard ThreadLocal.

        Parameters:
        closure - the code to run
        Returns:
        the closure's return value

        +
      • +
      + + +
        +
      • +

        static java.lang.Object doWithAuth(java.lang.String username, groovy.lang.Closure<?> closure)

        +

        Authenticate as the specified user and execute the closure with that authentication. Restores + the authentication to the one that was active if it exists, or clears the context otherwise. + + This is similar to run-as and switch-user but is only local to a Closure.

        Parameters:
        username - the username to authenticate as
        closure - the code to run
        Returns:
        the closure's return value

        +
      • +
      + + +
        +
      • +

        static java.util.SortedMap<java.lang.Integer, java.lang.String> findFilterChainNames(java.lang.Object filterChainFilterNames, boolean useSecureChannel, boolean useIpRestrictions, boolean useX509, boolean useDigestAuth, boolean useBasicAuth, boolean useSwitchUserFilter)

        +

        +
      • +
      + + +
        +
      • +

        static java.lang.Throwable getLastException(javax.servlet.http.HttpSession session)

        +

        Get the last auth exception.

        Parameters:
        session - the session
        Returns:
        the exception

        +
      • +
      + + +
        +
      • +

        static java.lang.String getLastUsername(javax.servlet.http.HttpSession session)

        +

        Get the last attempted username.

        Parameters:
        session - the session
        Returns:
        the username

        +
      • +
      + + +
        +
      • +

        @groovy.transform.CompileDynamic +static java.util.Collection<org.springframework.security.core.GrantedAuthority> getPrincipalAuthorities()

        +

        Get the current user's authorities.

        Returns:
        a list of authorities (empty if not authenticated).

        +
      • +
      + + +
        +
      • +

        static org.springframework.security.web.savedrequest.SavedRequest getSavedRequest(javax.servlet.http.HttpSession session)

        +

        Get the saved request from the session.

        Parameters:
        session - the session
        Returns:
        the saved request

        +
      • +
      + + +
        +
      • +

        static groovy.util.ConfigObject getSecurityConfig()

        +

        Parse and load the security configuration.

        Returns:
        the configuration

        +
      • +
      + + +
        +
      • +

        static java.lang.String getSecurityConfigType()

        +

        Lookup the security type as a String to avoid dev mode reload issues.

        Returns:
        the name of the SecurityConfigType

        +
      • +
      + + +
        +
      • +

        static org.springframework.security.core.context.SecurityContext getSecurityContext(javax.servlet.http.HttpSession session)

        +

        +
      • +
      + + +
        +
      • +

        static java.lang.String getSwitchedUserOriginalUsername()

        +

        Get the username of the original user before switching to another.

        Returns:
        the original login name

        +
      • +
      + + +
        +
      • +

        static boolean ifAllGranted(java.lang.String roles)

        +

        Check if the current user has all of the specified roles.

        Parameters:
        roles - a comma-delimited list of role names
        Returns:
        true if the user is authenticated and has all the roles

        +
      • +
      + + +
        +
      • +

        static boolean ifAllGranted(java.util.Collection<? extends org.springframework.security.core.GrantedAuthority> roles)

        +

        +
      • +
      + + +
        +
      • +

        static boolean ifAnyGranted(java.lang.String roles)

        +

        Check if the current user has any of the specified roles.

        Parameters:
        roles - a comma-delimited list of role names
        Returns:
        true if the user is authenticated and has any the roles

        +
      • +
      + + +
        +
      • +

        static boolean ifAnyGranted(java.util.Collection<? extends org.springframework.security.core.GrantedAuthority> roles)

        +

        +
      • +
      + + +
        +
      • +

        static boolean ifNotGranted(java.lang.String roles)

        +

        Check if the current user has none of the specified roles.

        Parameters:
        roles - a comma-delimited list of role names
        Returns:
        true if the user is authenticated and has none the roles

        +
      • +
      + + +
        +
      • +

        static boolean ifNotGranted(java.util.Collection<? extends org.springframework.security.core.GrantedAuthority> roles)

        +

        +
      • +
      + + +
        +
      • +

        static boolean isAjax(javax.servlet.http.HttpServletRequest request)

        +

        Check if the request was triggered by an Ajax call.

        Parameters:
        request - the request
        Returns:
        true if Ajax

        +
      • +
      + + +
        +
      • +

        static boolean isSwitched()

        +

        Check if the current user is switched to another user.

        Returns:
        true if logged in and switched

        +
      • +
      + + +
        +
      • +

        static void loadSecondaryConfig(java.lang.String className)

        +

        Allow a secondary plugin to add config attributes.

        Parameters:
        className - the name of the config class.

        +
      • +
      + + +
        +
      • +

        static boolean noFilterIsApplied(java.util.List<java.util.Map<java.lang.String, ?>> chainMap, java.lang.String pattern)

        +

        +
      • +
      + + +
        +
      • +

        static java.util.List<org.springframework.security.core.GrantedAuthority> parseAuthoritiesString(java.lang.String roleNames)

        +

        Split the role names and create org.springframework.security.core.GrantedAuthoritys for each.

        Parameters:
        roleNames - comma-delimited role names
        Returns:
        authorities (possibly empty)

        +
      • +
      + + +
        +
      • +

        static void reauthenticate(java.lang.String username, java.lang.String password)

        +

        Rebuild an Authentication for the given username and register it in the security context. + Typically used after updating a user's authorities or other auth-cached info. + + Also removes the user from the user cache to force a refresh at next login.

        Parameters:
        username - the user's login name
        password - optional

        +
      • +
      + + +
        +
      • +

        static void registerAfterInvocationProvider(java.lang.String beanName)

        +

        Register an AfterInvocationProvider bean name. + + Note - only for use by plugins during bean building.

        Parameters:
        beanName - the Spring bean name of the provider

        +
      • +
      + + +
        +
      • +

        static void registerFilter(java.lang.String beanName, SecurityFilterPosition position)

        +

        Register a filter bean name in a specified position in the chain. + + Note - only for use by plugins during bean building - to register at runtime + (preferably in BootStrap) use clientRegisterFilter.

        Parameters:
        beanName - the Spring bean name of the filter
        position - the position

        +
      • +
      + + +
        +
      • +

        static void registerFilter(java.lang.String beanName, int order)

        +

        Register a filter bean name in a specified position in the chain. + + Note - only for use by plugins during bean building - to register at runtime + (preferably in BootStrap) use clientRegisterFilter.

        Parameters:
        beanName - the Spring bean name of the filter
        order - the position (see SecurityFilterPosition)

        +
      • +
      + + +
        +
      • +

        static void registerLogoutHandler(java.lang.String beanName)

        +

        Register a logout handler bean name. + + Note - only for use by plugins during bean building.

        Parameters:
        beanName - the Spring bean name of the handler

        +
      • +
      + + +
        +
      • +

        static void registerProvider(java.lang.String beanName)

        +

        Register a provider bean name. + + Note - only for use by plugins during bean building.

        Parameters:
        beanName - the Spring bean name of the provider

        +
      • +
      + + +
        +
      • +

        static void registerVoter(java.lang.String beanName)

        +

        Register a voter bean name. + + Note - only for use by plugins during bean building.

        Parameters:
        beanName - the Spring bean name of the voter

        +
      • +
      + + +
        +
      • +

        static void reloadSecurityConfig()

        +

        Force a reload of the security configuration.

        +
      • +
      + + +
        +
      • +

        static void resetSecurityConfig()

        +

        Reset the config for testing or after a dev mode Config.groovy change.

        +
      • +
      + + +
        +
      • +

        static java.util.Set<java.lang.String> retainAll(java.lang.Object granted, java.lang.Object required)

        +

        Find authorities in granted that are also in required.

        Parameters:
        granted - the granted authorities (a collection or array of org.springframework.security.core.GrantedAuthority).
        required - the required authorities (a collection or array of org.springframework.security.core.GrantedAuthority).
        Returns:
        the authority names

        +
      • +
      + + +
        +
      • +

        static void setApplication(grails.core.GrailsApplication app)

        +

        Set at startup by plugin.

        Parameters:
        app - the application

        +
      • +
      + + +
        +
      • +

        static void setSecurityConfig(groovy.util.ConfigObject config)

        +

        For testing only.

        Parameters:
        config - the config

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/access/NullAfterInvocationProvider.html b/6.0.2/groovydoc/grails/plugin/springsecurity/access/NullAfterInvocationProvider.html new file mode 100644 index 000000000..26c40da84 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/access/NullAfterInvocationProvider.html @@ -0,0 +1,336 @@ + + + + + + + + + + + NullAfterInvocationProvider (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.access
+ +

[Groovy] Class NullAfterInvocationProvider

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.access.AfterInvocationProvider
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class NullAfterInvocationProvider
    +extends java.lang.Object
    +implements org.springframework.security.access.AfterInvocationProvider
    + +

    No-op implementation.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        java.lang.Objectdecide(org.springframework.security.core.Authentication a, java.lang.Object o, java.util.Collection<org.springframework.security.access.ConfigAttribute> attrs, java.lang.Object returnedObject)
        booleansupports(org.springframework.security.access.ConfigAttribute attribute)
        booleansupports(java.lang.Class<?> clazz)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        NullAfterInvocationProvider()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        java.lang.Object decide(org.springframework.security.core.Authentication a, java.lang.Object o, java.util.Collection<org.springframework.security.access.ConfigAttribute> attrs, java.lang.Object returnedObject)

        +

        +
      • +
      + + +
        +
      • +

        boolean supports(org.springframework.security.access.ConfigAttribute attribute)

        +

        +
      • +
      + + +
        +
      • +

        boolean supports(java.lang.Class<?> clazz)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/access/intercept/NullAfterInvocationManager.html b/6.0.2/groovydoc/grails/plugin/springsecurity/access/intercept/NullAfterInvocationManager.html new file mode 100644 index 000000000..54f814d7b --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/access/intercept/NullAfterInvocationManager.html @@ -0,0 +1,336 @@ + + + + + + + + + + + NullAfterInvocationManager (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.access.intercept
+ +

[Groovy] Class NullAfterInvocationManager

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.access.intercept.AfterInvocationManager
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class NullAfterInvocationManager
    +extends java.lang.Object
    +implements org.springframework.security.access.intercept.AfterInvocationManager
    + +

    No-op implementation.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + +
      +
    • +

      Constructor Summary

      + +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        java.lang.Objectdecide(org.springframework.security.core.Authentication a, java.lang.Object o, java.util.Collection<org.springframework.security.access.ConfigAttribute> attrs, java.lang.Object returnedObject)
        booleansupports(org.springframework.security.access.ConfigAttribute attribute)
        booleansupports(java.lang.Class<?> clazz)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        NullAfterInvocationManager()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        java.lang.Object decide(org.springframework.security.core.Authentication a, java.lang.Object o, java.util.Collection<org.springframework.security.access.ConfigAttribute> attrs, java.lang.Object returnedObject)

        +

        +
      • +
      + + +
        +
      • +

        boolean supports(org.springframework.security.access.ConfigAttribute attribute)

        +

        +
      • +
      + + +
        +
      • +

        boolean supports(java.lang.Class<?> clazz)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/access/intercept/package-frame.html b/6.0.2/groovydoc/grails/plugin/springsecurity/access/intercept/package-frame.html new file mode 100644 index 000000000..7a0482e45 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/access/intercept/package-frame.html @@ -0,0 +1,58 @@ + + + + + grails.plugin.springsecurity.access.intercept + + + + + + + + + + +
+ grails.plugin.springsecurity.access.intercept +
+ + + + + +
+

Classes

+ +
+ + + + + + + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/access/intercept/package-summary.html b/6.0.2/groovydoc/grails/plugin/springsecurity/access/intercept/package-summary.html new file mode 100644 index 000000000..14d3e22f7 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/access/intercept/package-summary.html @@ -0,0 +1,144 @@ + + + + + +grails.plugin.springsecurity.access.intercept (spring-security-core 6.0.2 API) + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + +
+

Package grails.plugin.springsecurity.access.intercept

+
+ + + +
+ + + + +
+ +
+ + + + + + + +
+ + +
+ + + + + +
+ + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/access/package-frame.html b/6.0.2/groovydoc/grails/plugin/springsecurity/access/package-frame.html new file mode 100644 index 000000000..c28baa753 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/access/package-frame.html @@ -0,0 +1,58 @@ + + + + + grails.plugin.springsecurity.access + + + + + + + + + + +
+ grails.plugin.springsecurity.access +
+ + + + + +
+

Classes

+ +
+ + + + + + + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/access/package-summary.html b/6.0.2/groovydoc/grails/plugin/springsecurity/access/package-summary.html new file mode 100644 index 000000000..e1aac3ec6 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/access/package-summary.html @@ -0,0 +1,144 @@ + + + + + +grails.plugin.springsecurity.access (spring-security-core 6.0.2 API) + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + +
+

Package grails.plugin.springsecurity.access

+
+ + + +
+ + + + +
+ +
+ + + + + + + +
+ + +
+ + + + + +
+ + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/access/vote/AuthenticatedVetoableDecisionManager.html b/6.0.2/groovydoc/grails/plugin/springsecurity/access/vote/AuthenticatedVetoableDecisionManager.html new file mode 100644 index 000000000..88ced09ce --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/access/vote/AuthenticatedVetoableDecisionManager.html @@ -0,0 +1,352 @@ + + + + + + + + + + + AuthenticatedVetoableDecisionManager (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.access.vote
+ +

[Groovy] Class AuthenticatedVetoableDecisionManager

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class AuthenticatedVetoableDecisionManager
    +extends org.springframework.security.access.vote.AbstractAccessDecisionManager
    + +

    Uses the affirmative-based logic for roles, i.e. any in the list will grant access, but allows + an authenticated voter to 'veto' access. This allows specification of roles and + IS_AUTHENTICATED_FULLY on one line in SecurityConfig.groovy.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + +
      +
    • +

      Constructor Summary

      +
        + + + + + + + + + + +
        Constructors 
        Constructor and description
        + AuthenticatedVetoableDecisionManager + (java.util.List<org.springframework.security.access.AccessDecisionVoter> decisionVoters)
        +
      +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        protected booleancheckAuthenticatedVoters(org.springframework.security.core.Authentication authentication, java.lang.Object object, java.util.Collection<org.springframework.security.access.ConfigAttribute> configAttributes)
        Allow any org.springframework.security.access.vote.AuthenticatedVoter to veto.
        protected booleancheckOtherVoters(org.springframework.security.core.Authentication authentication, java.lang.Object object, java.util.Collection<org.springframework.security.access.ConfigAttribute> configAttributes)
        Check the other (non-org.springframework.security.access.vote.AuthenticatedVoter) voters.
        voiddecide(org.springframework.security.core.Authentication authentication, java.lang.Object object, java.util.Collection<org.springframework.security.access.ConfigAttribute> configAttributes)
        protected voiddeny()
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class org.springframework.security.access.vote.AbstractAccessDecisionManagerorg.springframework.security.access.vote.AbstractAccessDecisionManager#supports(java.lang.Class), org.springframework.security.access.vote.AbstractAccessDecisionManager#supports(org.springframework.security.access.ConfigAttribute), org.springframework.security.access.vote.AbstractAccessDecisionManager#afterPropertiesSet(), org.springframework.security.access.vote.AbstractAccessDecisionManager#getDecisionVoters(), org.springframework.security.access.vote.AbstractAccessDecisionManager#isAllowIfAllAbstainDecisions(), org.springframework.security.access.vote.AbstractAccessDecisionManager#setAllowIfAllAbstainDecisions(boolean), org.springframework.security.access.vote.AbstractAccessDecisionManager#setMessageSource(org.springframework.context.MessageSource), org.springframework.security.access.vote.AbstractAccessDecisionManager#toString(), org.springframework.security.access.vote.AbstractAccessDecisionManager#wait(long), org.springframework.security.access.vote.AbstractAccessDecisionManager#wait(long, int), org.springframework.security.access.vote.AbstractAccessDecisionManager#wait(), org.springframework.security.access.vote.AbstractAccessDecisionManager#equals(java.lang.Object), org.springframework.security.access.vote.AbstractAccessDecisionManager#hashCode(), org.springframework.security.access.vote.AbstractAccessDecisionManager#getClass(), org.springframework.security.access.vote.AbstractAccessDecisionManager#notify(), org.springframework.security.access.vote.AbstractAccessDecisionManager#notifyAll(), org.springframework.security.access.vote.AbstractAccessDecisionManager#decide(org.springframework.security.core.Authentication, java.lang.Object, java.util.Collection)
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        AuthenticatedVetoableDecisionManager(java.util.List<org.springframework.security.access.AccessDecisionVoter> decisionVoters)

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        @java.lang.SuppressWarnings(value: [rawtypes, unchecked]) +protected boolean checkAuthenticatedVoters(org.springframework.security.core.Authentication authentication, java.lang.Object object, java.util.Collection<org.springframework.security.access.ConfigAttribute> configAttributes)

        +

        Allow any org.springframework.security.access.vote.AuthenticatedVoter to veto. If any voter denies, + throw an exception; if any grant, return true; + otherwise return false if all abstain.

        +
      • +
      + + +
        +
      • +

        @java.lang.SuppressWarnings(value: [rawtypes, unchecked]) +protected boolean checkOtherVoters(org.springframework.security.core.Authentication authentication, java.lang.Object object, java.util.Collection<org.springframework.security.access.ConfigAttribute> configAttributes)

        +

        Check the other (non-org.springframework.security.access.vote.AuthenticatedVoter) voters. If any voter grants, + return true. If any voter denies, throw exception. Otherwise return false + to indicate that all abstained.

        +
      • +
      + + +
        +
      • +

        void decide(org.springframework.security.core.Authentication authentication, java.lang.Object object, java.util.Collection<org.springframework.security.access.ConfigAttribute> configAttributes)

        +

        +
      • +
      + + +
        +
      • +

        protected void deny()

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/access/vote/ClosureConfigAttribute.html b/6.0.2/groovydoc/grails/plugin/springsecurity/access/vote/ClosureConfigAttribute.html new file mode 100644 index 000000000..6a8599f2c --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/access/vote/ClosureConfigAttribute.html @@ -0,0 +1,347 @@ + + + + + + + + + + + ClosureConfigAttribute (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.access.vote
+ +

[Groovy] Class ClosureConfigAttribute

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.access.ConfigAttribute
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class ClosureConfigAttribute
    +extends java.lang.Object
    +implements org.springframework.security.access.ConfigAttribute
    + +

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        groovy.lang.Closure<?> closure
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      +
        + + + + + + + + + + +
        Constructors 
        Constructor and description
        + ClosureConfigAttribute + (groovy.lang.Closure<?> closure)
        Constructor.
        +
      +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        java.lang.StringgetAttribute()
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        final groovy.lang.Closure<?> closure

        +

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        ClosureConfigAttribute(groovy.lang.Closure<?> closure)

        +

        Constructor.

        Parameters:
        closure - the closure

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        java.lang.String getAttribute()

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/access/vote/ClosureVoter.html b/6.0.2/groovydoc/grails/plugin/springsecurity/access/vote/ClosureVoter.html new file mode 100644 index 000000000..7ab1e0455 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/access/vote/ClosureVoter.html @@ -0,0 +1,376 @@ + + + + + + + + + + + ClosureVoter (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.access.vote
+ +

[Groovy] Class ClosureVoter

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.access.AccessDecisionVoter<org.springframework.security.web.FilterInvocation>, org.springframework.context.ApplicationContextAware
    +
    + + + +
    +
    + +
    @groovy.util.logging.Slf4j
    +@groovy.transform.CompileStatic
    +class ClosureVoter
    +extends java.lang.Object
    +implements org.springframework.security.access.AccessDecisionVoter<org.springframework.security.web.FilterInvocation>, org.springframework.context.ApplicationContextAware
    + +

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        org.springframework.context.ApplicationContext applicationContext
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      +
        + + + + + + + + + + +
        Constructors 
        Constructor and description
        + ClosureVoter + ()
        +
      +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        booleansupports(org.springframework.security.access.ConfigAttribute attribute)
        booleansupports(java.lang.Class<?> clazz)
        intvote(org.springframework.security.core.Authentication authentication, org.springframework.security.web.FilterInvocation fi, java.util.Collection<org.springframework.security.access.ConfigAttribute> attributes)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        org.springframework.context.ApplicationContext applicationContext

        +

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        ClosureVoter()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        boolean supports(org.springframework.security.access.ConfigAttribute attribute)

        +

        +
      • +
      + + +
        +
      • +

        boolean supports(java.lang.Class<?> clazz)

        +

        +
      • +
      + + +
        +
      • +

        int vote(org.springframework.security.core.Authentication authentication, org.springframework.security.web.FilterInvocation fi, java.util.Collection<org.springframework.security.access.ConfigAttribute> attributes)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/access/vote/package-frame.html b/6.0.2/groovydoc/grails/plugin/springsecurity/access/vote/package-frame.html new file mode 100644 index 000000000..b79ff9ef7 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/access/vote/package-frame.html @@ -0,0 +1,58 @@ + + + + + grails.plugin.springsecurity.access.vote + + + + + + + + + + +
+ grails.plugin.springsecurity.access.vote +
+ + + + + +
+

Classes

+ +
+ + + + + + + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/access/vote/package-summary.html b/6.0.2/groovydoc/grails/plugin/springsecurity/access/vote/package-summary.html new file mode 100644 index 000000000..d1b960808 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/access/vote/package-summary.html @@ -0,0 +1,161 @@ + + + + + +grails.plugin.springsecurity.access.vote (spring-security-core 6.0.2 API) + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + +
+

Package grails.plugin.springsecurity.access.vote

+
+ + + +
+ + + + +
+ +
+ + + + + + + +
+ + +
+ + + + + +
+ + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/annotation/Authorities.html b/6.0.2/groovydoc/grails/plugin/springsecurity/annotation/Authorities.html new file mode 100644 index 000000000..a9708ae29 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/annotation/Authorities.html @@ -0,0 +1,271 @@ + + + + + + + + + + + Authorities (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.annotation
+ +

[Groovy] Annotation Type Authorities

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    java.lang.annotation.Annotation
    +
    + + + +
    +
    + +
    @java.lang.annotation.Target(value: [ElementType.FIELD, ElementType.METHOD, ElementType.TYPE])
    +@java.lang.annotation.Retention(value: RetentionPolicy.RUNTIME)
    +@java.lang.annotation.Inherited
    +@java.lang.annotation.Documented
    +@org.codehaus.groovy.transform.GroovyASTTransformationClass(value: grails.plugin.springsecurity.annotation.AuthoritiesTransformation)
    +@interface Authorities
    + +

    Specify the property file key with this annotation, and the AST transform + class will replace with an

    Secured:
    annotation with the associated role names.
    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        abstract java.lang.Stringvalue()
        The property file key; the property value will be a comma-delimited list of role names.
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        abstract java.lang.String value()

        +

        The property file key; the property value will be a comma-delimited list of role names.

        Returns:
        the key

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/annotation/AuthoritiesTransformation.html b/6.0.2/groovydoc/grails/plugin/springsecurity/annotation/AuthoritiesTransformation.html new file mode 100644 index 000000000..a84880759 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/annotation/AuthoritiesTransformation.html @@ -0,0 +1,407 @@ + + + + + + + + + + + AuthoritiesTransformation (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.annotation
+ +

[Groovy] Class AuthoritiesTransformation

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.codehaus.groovy.transform.ASTTransformation
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +@org.codehaus.groovy.transform.GroovyASTTransformation(phase: CompilePhase.CANONICALIZATION)
    +class AuthoritiesTransformation
    +extends java.lang.Object
    +implements org.codehaus.groovy.transform.ASTTransformation
    + +

    See http://burtbeckwith.com/blog/?p=1398 for the motivation for this.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +

      Field Summary

      +
        + + + + + + + + + + + + + + +
        Fields 
        ModifiersNameDescription
        protected static org.codehaus.groovy.ast.ClassNode SECURED
        +
      +
    • + +
    + + + + + + + + + + +
      +
    • +

      Constructor Summary

      + +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        protected org.codehaus.groovy.ast.AnnotationNodebuildAnnotationNode(java.lang.String[] authorityNames)
        protected org.codehaus.groovy.ast.AnnotationNodecreateAnnotation(org.codehaus.groovy.ast.AnnotationNode rolesNode, org.codehaus.groovy.control.SourceUnit sourceUnit)
        protected java.lang.String[]getAuthorityNames(java.lang.String fieldName, org.codehaus.groovy.ast.AnnotationNode rolesNode, org.codehaus.groovy.control.SourceUnit sourceUnit)
        protected voidreportError(java.lang.String message, org.codehaus.groovy.control.SourceUnit sourceUnit, org.codehaus.groovy.ast.ASTNode node)
        voidvisit(org.codehaus.groovy.ast.ASTNode[] astNodes, org.codehaus.groovy.control.SourceUnit sourceUnit)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        protected static org.codehaus.groovy.ast.ClassNode SECURED

        +

        +
      • +
      + +
    • +
    + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        AuthoritiesTransformation()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        protected org.codehaus.groovy.ast.AnnotationNode buildAnnotationNode(java.lang.String[] authorityNames)

        +

        +
      • +
      + + +
        +
      • +

        protected org.codehaus.groovy.ast.AnnotationNode createAnnotation(org.codehaus.groovy.ast.AnnotationNode rolesNode, org.codehaus.groovy.control.SourceUnit sourceUnit)

        +

        +
      • +
      + + +
        +
      • +

        protected java.lang.String[] getAuthorityNames(java.lang.String fieldName, org.codehaus.groovy.ast.AnnotationNode rolesNode, org.codehaus.groovy.control.SourceUnit sourceUnit)

        +

        +
      • +
      + + +
        +
      • +

        protected void reportError(java.lang.String message, org.codehaus.groovy.control.SourceUnit sourceUnit, org.codehaus.groovy.ast.ASTNode node)

        +

        +
      • +
      + + +
        +
      • +

        void visit(org.codehaus.groovy.ast.ASTNode[] astNodes, org.codehaus.groovy.control.SourceUnit sourceUnit)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/annotation/Secured.html b/6.0.2/groovydoc/grails/plugin/springsecurity/annotation/Secured.html new file mode 100644 index 000000000..9fa1b4a4d --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/annotation/Secured.html @@ -0,0 +1,339 @@ + + + + + + + + + + + Secured (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.annotation
+ +

[Groovy] Annotation Type Secured

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    java.lang.annotation.Annotation
    +
    + + + +
    +
    + +
    @java.lang.annotation.Target(value: [ElementType.METHOD, ElementType.TYPE])
    +@java.lang.annotation.Retention(value: RetentionPolicy.RUNTIME)
    +@java.lang.annotation.Inherited
    +@java.lang.annotation.Documented
    +@interface Secured
    + +

    Annotation for Controllers at the class level or per-action, defining what roles + are required for the entire controller or action.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + +
      +
    • +

      Element Summary

      + +
        + + + + + + + + + + + + +
        Required Element Summary 
        TypeName and Description
        static java.lang.String ANY_METHOD
        Default value for httpMethod().
        +
      + +
    • +
    + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        abstract java.lang.Class<?>closure()
        Optional attribute to specify a closure that will be evaluated to decide if access should be allowed.
        abstract java.lang.StringhttpMethod()
        Optional attribute to specify the HTTP method required.
        abstract java.lang.String[]value()
        Defines the security configuration attributes (e.g.
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + +
      +
    • + + +

      Element Detail

      + + +
        +
      • +

        static final java.lang.String ANY_METHOD

        +

        Default value for httpMethod().

        +
      • +
      + +
    • +
    + + + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        abstract java.lang.Class<?> closure()

        +

        Optional attribute to specify a closure that will be evaluated to decide if access should be allowed.

        Returns:
        the closure class

        +
      • +
      + + +
        +
      • +

        abstract java.lang.String httpMethod()

        +

        Optional attribute to specify the HTTP method required.

        Returns:
        the method

        +
      • +
      + + +
        +
      • +

        abstract java.lang.String[] value()

        +

        Defines the security configuration attributes (e.g. ROLE_USER, ROLE_ADMIN, IS_AUTHENTICATED_REMEMBERED, etc.)

        Returns:
        the names of the roles, expressions, and tokens

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/annotation/SecuredClosureDelegate.html b/6.0.2/groovydoc/grails/plugin/springsecurity/annotation/SecuredClosureDelegate.html new file mode 100644 index 000000000..b1f4b99db --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/annotation/SecuredClosureDelegate.html @@ -0,0 +1,362 @@ + + + + + + + + + + + SecuredClosureDelegate (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.annotation
+ +

[Groovy] Class SecuredClosureDelegate

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class SecuredClosureDelegate
    +extends org.springframework.security.web.access.expression.WebSecurityExpressionRoot
    + +

    Set as the delegate of a closure in

    Secured:
    annotations; provides access to the request and application context, + as well as all of the methods and properties available when using SpEL.
    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +
        + + + + + + + + + + + +
        Inherited fields 
        Fields inherited from classFields
        class org.springframework.security.web.access.expression.WebSecurityExpressionRootrequest, permitAll, denyAll, read, write, create, delete, admin
        +
      +
    • + +
    + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        org.springframework.context.ApplicationContext ctx
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      +
        + + + + + + + + + + +
        Constructors 
        Constructor and description
        + SecuredClosureDelegate + (org.springframework.security.core.Authentication a, org.springframework.security.web.FilterInvocation fi, org.springframework.context.ApplicationContext ctx)
        +
      +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        grails.web.servlet.mvc.GrailsParameterMapgetParams()
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class org.springframework.security.web.access.expression.WebSecurityExpressionRootorg.springframework.security.web.access.expression.WebSecurityExpressionRoot#hasIpAddress(java.lang.String), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#getAuthentication(), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#isAnonymous(), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#getPrincipal(), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#isAuthenticated(), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#isRememberMe(), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#permitAll(), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#denyAll(), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#hasAuthority(java.lang.String), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#hasAnyAuthority([Ljava.lang.String;), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#hasRole(java.lang.String), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#hasAnyRole([Ljava.lang.String;), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#isFullyAuthenticated(), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#setTrustResolver(org.springframework.security.authentication.AuthenticationTrustResolver), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#setRoleHierarchy(org.springframework.security.access.hierarchicalroles.RoleHierarchy), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#setDefaultRolePrefix(java.lang.String), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#hasPermission(java.lang.Object, java.lang.String, java.lang.Object), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#hasPermission(java.lang.Object, java.lang.Object), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#setPermissionEvaluator(org.springframework.security.access.PermissionEvaluator), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#wait(long), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#wait(long, int), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#wait(), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#equals(java.lang.Object), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#toString(), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#hashCode(), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#getClass(), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#notify(), org.springframework.security.web.access.expression.WebSecurityExpressionRoot#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        org.springframework.context.ApplicationContext ctx

        +

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        SecuredClosureDelegate(org.springframework.security.core.Authentication a, org.springframework.security.web.FilterInvocation fi, org.springframework.context.ApplicationContext ctx)

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        grails.web.servlet.mvc.GrailsParameterMap getParams()

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/annotation/package-frame.html b/6.0.2/groovydoc/grails/plugin/springsecurity/annotation/package-frame.html new file mode 100644 index 000000000..17ac706a4 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/annotation/package-frame.html @@ -0,0 +1,66 @@ + + + + + grails.plugin.springsecurity.annotation + + + + + + + + + + +
+ grails.plugin.springsecurity.annotation +
+ + + + + +
+

Classes

+ +
+ + + + + + +
+

Annotation Types

+ +
+ + + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/annotation/package-summary.html b/6.0.2/groovydoc/grails/plugin/springsecurity/annotation/package-summary.html new file mode 100644 index 000000000..91769e671 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/annotation/package-summary.html @@ -0,0 +1,189 @@ + + + + + +grails.plugin.springsecurity.annotation (spring-security-core 6.0.2 API) + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + +
+

Package grails.plugin.springsecurity.annotation

+
+ + + +
+ + + + +
+
    +
  • + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    + + AuthoritiesTransformation + + See http://burtbeckwith.com/blog/?
    + + SecuredClosureDelegate + + Set as the delegate of a closure in
    Secured:
    annotations; provides access to the request and application context, + as well as all of the methods and properties available when using SpEL.
    +
  • +
+
+ + + + + + +
+
    +
  • + + + + + + + + + + + + + + + + + +
    Annotation Type Summary 
    Annotation TypeDescription
    + + Authorities + + Specify the property file key with this annotation, and the AST transform + class will replace with an
    Secured:
    annotation with the associated role names.
    + + Secured + + Annotation for Controllers at the class level or per-action, defining what roles + are required for the entire controller or action.
    +
  • +
+
+ + + +
+ + +
+ + + + + +
+ + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/authentication/GrailsAnonymousAuthenticationProvider.html b/6.0.2/groovydoc/grails/plugin/springsecurity/authentication/GrailsAnonymousAuthenticationProvider.html new file mode 100644 index 000000000..ad278acc1 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/authentication/GrailsAnonymousAuthenticationProvider.html @@ -0,0 +1,322 @@ + + + + + + + + + + + GrailsAnonymousAuthenticationProvider (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.authentication
+ +

[Groovy] Class GrailsAnonymousAuthenticationProvider

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.authentication.AuthenticationProvider
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class GrailsAnonymousAuthenticationProvider
    +extends java.lang.Object
    +implements org.springframework.security.authentication.AuthenticationProvider
    + +

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        org.springframework.security.core.Authenticationauthenticate(org.springframework.security.core.Authentication authentication)
        booleansupports(java.lang.Class<?> authenticationClass)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        GrailsAnonymousAuthenticationProvider()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        org.springframework.security.core.Authentication authenticate(org.springframework.security.core.Authentication authentication)

        +

        +
      • +
      + + +
        +
      • +

        boolean supports(java.lang.Class<?> authenticationClass)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/authentication/GrailsAnonymousAuthenticationToken.html b/6.0.2/groovydoc/grails/plugin/springsecurity/authentication/GrailsAnonymousAuthenticationToken.html new file mode 100644 index 000000000..1756ad8d4 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/authentication/GrailsAnonymousAuthenticationToken.html @@ -0,0 +1,375 @@ + + + + + + + + + + + GrailsAnonymousAuthenticationToken (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.authentication
+ +

[Groovy] Class GrailsAnonymousAuthenticationToken

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class GrailsAnonymousAuthenticationToken
    +extends org.springframework.security.authentication.AnonymousAuthenticationToken
    + +

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +

      Field Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        ModifiersNameDescription
        static java.lang.String PASSWORD
        static org.springframework.security.core.GrantedAuthority ROLE
        static java.util.List<org.springframework.security.core.GrantedAuthority> ROLES
        static java.lang.String ROLE_NAME
        static java.lang.String USERNAME
        static org.springframework.security.core.userdetails.UserDetails USER_DETAILS
        +
      +
    • + +
    + + + + + + + + + + +
      +
    • +

      Constructor Summary

      + +
    • +
    + + + + +
      + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class org.springframework.security.authentication.AnonymousAuthenticationTokenorg.springframework.security.authentication.AnonymousAuthenticationToken#getCredentials(), org.springframework.security.authentication.AnonymousAuthenticationToken#getPrincipal(), org.springframework.security.authentication.AnonymousAuthenticationToken#getKeyHash(), org.springframework.security.authentication.AnonymousAuthenticationToken#equals(java.lang.Object), org.springframework.security.authentication.AnonymousAuthenticationToken#hashCode(), org.springframework.security.authentication.AnonymousAuthenticationToken#getAuthorities(), org.springframework.security.authentication.AnonymousAuthenticationToken#setAuthenticated(boolean), org.springframework.security.authentication.AnonymousAuthenticationToken#isAuthenticated(), org.springframework.security.authentication.AnonymousAuthenticationToken#setDetails(java.lang.Object), org.springframework.security.authentication.AnonymousAuthenticationToken#eraseCredentials(), org.springframework.security.authentication.AnonymousAuthenticationToken#getDetails(), org.springframework.security.authentication.AnonymousAuthenticationToken#toString(), org.springframework.security.authentication.AnonymousAuthenticationToken#getName(), org.springframework.security.authentication.AnonymousAuthenticationToken#wait(long), org.springframework.security.authentication.AnonymousAuthenticationToken#wait(long, int), org.springframework.security.authentication.AnonymousAuthenticationToken#wait(), org.springframework.security.authentication.AnonymousAuthenticationToken#getClass(), org.springframework.security.authentication.AnonymousAuthenticationToken#notify(), org.springframework.security.authentication.AnonymousAuthenticationToken#notifyAll(), org.springframework.security.authentication.AnonymousAuthenticationToken#implies(javax.security.auth.Subject)
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        public static final java.lang.String PASSWORD

        +

        +
      • +
      + + +
        +
      • +

        public static final org.springframework.security.core.GrantedAuthority ROLE

        +

        +
      • +
      + + +
        +
      • +

        public static final java.util.List<org.springframework.security.core.GrantedAuthority> ROLES

        +

        +
      • +
      + + +
        +
      • +

        public static final java.lang.String ROLE_NAME

        +

        +
      • +
      + + +
        +
      • +

        public static final java.lang.String USERNAME

        +

        +
      • +
      + + +
        +
      • +

        public static final org.springframework.security.core.userdetails.UserDetails USER_DETAILS

        +

        +
      • +
      + +
    • +
    + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        GrailsAnonymousAuthenticationToken(java.lang.String key, java.lang.Object details)

        +

        Constructor.

        +
      • +
      + +
    • +
    + + + + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/authentication/NullAuthenticationEventPublisher.html b/6.0.2/groovydoc/grails/plugin/springsecurity/authentication/NullAuthenticationEventPublisher.html new file mode 100644 index 000000000..42d49d532 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/authentication/NullAuthenticationEventPublisher.html @@ -0,0 +1,322 @@ + + + + + + + + + + + NullAuthenticationEventPublisher (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.authentication
+ +

[Groovy] Class NullAuthenticationEventPublisher

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.authentication.AuthenticationEventPublisher
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class NullAuthenticationEventPublisher
    +extends java.lang.Object
    +implements org.springframework.security.authentication.AuthenticationEventPublisher
    + +

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voidpublishAuthenticationFailure(org.springframework.security.core.AuthenticationException e, org.springframework.security.core.Authentication a)
        voidpublishAuthenticationSuccess(org.springframework.security.core.Authentication a)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        NullAuthenticationEventPublisher()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        void publishAuthenticationFailure(org.springframework.security.core.AuthenticationException e, org.springframework.security.core.Authentication a)

        +

        +
      • +
      + + +
        +
      • +

        void publishAuthenticationSuccess(org.springframework.security.core.Authentication a)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/authentication/package-frame.html b/6.0.2/groovydoc/grails/plugin/springsecurity/authentication/package-frame.html new file mode 100644 index 000000000..8defa2658 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/authentication/package-frame.html @@ -0,0 +1,58 @@ + + + + + grails.plugin.springsecurity.authentication + + + + + + + + + + +
+ grails.plugin.springsecurity.authentication +
+ + + + + +
+

Classes

+ +
+ + + + + + + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/authentication/package-summary.html b/6.0.2/groovydoc/grails/plugin/springsecurity/authentication/package-summary.html new file mode 100644 index 000000000..2bedfd3b0 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/authentication/package-summary.html @@ -0,0 +1,160 @@ + + + + + +grails.plugin.springsecurity.authentication (spring-security-core 6.0.2 API) + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + +
+

Package grails.plugin.springsecurity.authentication

+
+ + + +
+ + + + +
+ +
+ + + + + + + +
+ + +
+ + + + + +
+ + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/package-frame.html b/6.0.2/groovydoc/grails/plugin/springsecurity/package-frame.html new file mode 100644 index 000000000..2910f5082 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/package-frame.html @@ -0,0 +1,74 @@ + + + + + grails.plugin.springsecurity + + + + + + + + + + +
+ grails.plugin.springsecurity +
+ + + + +
+

Traits

+ +
+ + + +
+

Classes

+ +
+ + + +
+

Enums

+ +
+ + + + + + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/package-summary.html b/6.0.2/groovydoc/grails/plugin/springsecurity/package-summary.html new file mode 100644 index 000000000..7aff09b04 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/package-summary.html @@ -0,0 +1,294 @@ + + + + + +grails.plugin.springsecurity (spring-security-core 6.0.2 API) + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + +
+

Package grails.plugin.springsecurity

+
+ + + +
+ + + +
+
    +
  • + + + + + + + + + + + + + +
    Trait Summary 
    TraitDescription
    + + ControllerMixin + +
    Authors:
    Burt Beckwith
    +
  • +
+
+ + + +
+ +
+ + + +
+ +
+ + + + + + +
+ + +
+ + + + + +
+ + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/DefaultPostAuthenticationChecks.html b/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/DefaultPostAuthenticationChecks.html new file mode 100644 index 000000000..b6fe57e3a --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/DefaultPostAuthenticationChecks.html @@ -0,0 +1,367 @@ + + + + + + + + + + + DefaultPostAuthenticationChecks (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.userdetails
+ +

[Groovy] Class DefaultPostAuthenticationChecks

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.core.userdetails.UserDetailsChecker, org.springframework.context.MessageSourceAware
    +
    + + + +
    +
    + +
    @groovy.util.logging.Slf4j
    +@groovy.transform.CompileStatic
    +class DefaultPostAuthenticationChecks
    +extends java.lang.Object
    +implements org.springframework.security.core.userdetails.UserDetailsChecker, org.springframework.context.MessageSourceAware
    + +

    Copy of the private class in AbstractUserDetailsAuthenticationProvider + to make subclassing or replacement easier.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +

      Field Summary

      +
        + + + + + + + + + + + + + + +
        Fields 
        ModifiersNameDescription
        protected org.springframework.context.support.MessageSourceAccessor messages
        +
      +
    • + +
    + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voidcheck(org.springframework.security.core.userdetails.UserDetails user)
        voidsetMessageSource(org.springframework.context.MessageSource messageSource)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        protected org.springframework.context.support.MessageSourceAccessor messages

        +

        +
      • +
      + +
    • +
    + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        DefaultPostAuthenticationChecks()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        void check(org.springframework.security.core.userdetails.UserDetails user)

        +

        +
      • +
      + + +
        +
      • +

        @java.lang.Override +void setMessageSource(org.springframework.context.MessageSource messageSource)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/DefaultPreAuthenticationChecks.html b/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/DefaultPreAuthenticationChecks.html new file mode 100644 index 000000000..acaafeeef --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/DefaultPreAuthenticationChecks.html @@ -0,0 +1,367 @@ + + + + + + + + + + + DefaultPreAuthenticationChecks (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.userdetails
+ +

[Groovy] Class DefaultPreAuthenticationChecks

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.core.userdetails.UserDetailsChecker, org.springframework.context.MessageSourceAware
    +
    + + + +
    +
    + +
    @groovy.util.logging.Slf4j
    +@groovy.transform.CompileStatic
    +class DefaultPreAuthenticationChecks
    +extends java.lang.Object
    +implements org.springframework.security.core.userdetails.UserDetailsChecker, org.springframework.context.MessageSourceAware
    + +

    Copy of the private class in AbstractUserDetailsAuthenticationProvider + to make subclassing or replacement easier.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +

      Field Summary

      +
        + + + + + + + + + + + + + + +
        Fields 
        ModifiersNameDescription
        protected org.springframework.context.support.MessageSourceAccessor messages
        +
      +
    • + +
    + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voidcheck(org.springframework.security.core.userdetails.UserDetails user)
        voidsetMessageSource(org.springframework.context.MessageSource messageSource)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        protected org.springframework.context.support.MessageSourceAccessor messages

        +

        +
      • +
      + +
    • +
    + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        DefaultPreAuthenticationChecks()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        void check(org.springframework.security.core.userdetails.UserDetails user)

        +

        +
      • +
      + + +
        +
      • +

        @java.lang.Override +void setMessageSource(org.springframework.context.MessageSource messageSource)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/GormUserDetailsService.html b/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/GormUserDetailsService.html new file mode 100644 index 000000000..412f07946 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/GormUserDetailsService.html @@ -0,0 +1,406 @@ + + + + + + + + + + + GormUserDetailsService (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.userdetails
+ +

[Groovy] Class GormUserDetailsService

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    GrailsUserDetailsService
    +
    + + + +
    +
    + +
    @groovy.util.logging.Slf4j
    +class GormUserDetailsService
    +extends java.lang.Object
    +implements GrailsUserDetailsService
    + +

    Default implementation of GrailsUserDetailsService that uses + domain classes to load users and roles.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + + + + + + +
        Properties 
        TypeName and description
        static org.springframework.security.core.GrantedAuthority NO_ROLE
        Some Spring Security classes (e.g.
        grails.core.GrailsApplication grailsApplication
        Dependency injection for the application.
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      + +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        protected org.springframework.security.core.userdetails.UserDetailscreateUserDetails(java.lang.Object user, java.util.Collection<org.springframework.security.core.GrantedAuthority> authorities)
        protected java.util.Collection<org.springframework.security.core.GrantedAuthority>loadAuthorities(java.lang.Object user, java.lang.String username, boolean loadRoles)
        org.springframework.security.core.userdetails.UserDetailsloadUserByUsername(java.lang.String username, boolean loadRoles)
        org.springframework.security.core.userdetails.UserDetailsloadUserByUsername(java.lang.String username)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        static final org.springframework.security.core.GrantedAuthority NO_ROLE

        +

        Some Spring Security classes (e.g. RoleHierarchyVoter) expect at least one role, so + we give a user with no granted roles this one which gets past that restriction but + doesn't grant anything.

        +
      • +
      + + +
        +
      • +

        grails.core.GrailsApplication grailsApplication

        +

        Dependency injection for the application.

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        GormUserDetailsService()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        protected org.springframework.security.core.userdetails.UserDetails createUserDetails(java.lang.Object user, java.util.Collection<org.springframework.security.core.GrantedAuthority> authorities)

        +

        +
      • +
      + + +
        +
      • +

        protected java.util.Collection<org.springframework.security.core.GrantedAuthority> loadAuthorities(java.lang.Object user, java.lang.String username, boolean loadRoles)

        +

        +
      • +
      + + +
        +
      • +

        @grails.gorm.transactions.Transactional(readOnly: true, noRollbackFor: [IllegalArgumentException, UsernameNotFoundException]) +org.springframework.security.core.userdetails.UserDetails loadUserByUsername(java.lang.String username, boolean loadRoles)

        +

        +
      • +
      + + +
        +
      • +

        org.springframework.security.core.userdetails.UserDetails loadUserByUsername(java.lang.String username)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/GrailsUser.html b/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/GrailsUser.html new file mode 100644 index 000000000..a5d0e8a6b --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/GrailsUser.html @@ -0,0 +1,306 @@ + + + + + + + + + + + GrailsUser (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.userdetails
+ +

[Groovy] Class GrailsUser

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class GrailsUser
    +extends org.springframework.security.core.userdetails.User
    + +

    Extends the default Spring Security user class to contain the ID for efficient lookup + of the domain class from the Authentication.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        java.lang.Object id
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      +
        + + + + + + + + + + +
        Constructors 
        Constructor and description
        + GrailsUser + (java.lang.String username, java.lang.String password, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, java.util.Collection<org.springframework.security.core.GrantedAuthority> authorities, java.lang.Object id)
        Constructor.
        +
      +
    • +
    + + + + +
      + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class org.springframework.security.core.userdetails.Userorg.springframework.security.core.userdetails.User#getPassword(), org.springframework.security.core.userdetails.User#getAuthorities(), org.springframework.security.core.userdetails.User#getUsername(), org.springframework.security.core.userdetails.User#isAccountNonExpired(), org.springframework.security.core.userdetails.User#isAccountNonLocked(), org.springframework.security.core.userdetails.User#isCredentialsNonExpired(), org.springframework.security.core.userdetails.User#eraseCredentials(), org.springframework.security.core.userdetails.User#withUsername(java.lang.String), org.springframework.security.core.userdetails.User#withDefaultPasswordEncoder(), org.springframework.security.core.userdetails.User#withUserDetails(org.springframework.security.core.userdetails.UserDetails), org.springframework.security.core.userdetails.User#isEnabled(), org.springframework.security.core.userdetails.User#equals(java.lang.Object), org.springframework.security.core.userdetails.User#toString(), org.springframework.security.core.userdetails.User#hashCode(), org.springframework.security.core.userdetails.User#builder(), org.springframework.security.core.userdetails.User#wait(long), org.springframework.security.core.userdetails.User#wait(long, int), org.springframework.security.core.userdetails.User#wait(), org.springframework.security.core.userdetails.User#getClass(), org.springframework.security.core.userdetails.User#notify(), org.springframework.security.core.userdetails.User#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        final java.lang.Object id

        +

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        GrailsUser(java.lang.String username, java.lang.String password, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, java.util.Collection<org.springframework.security.core.GrantedAuthority> authorities, java.lang.Object id)

        +

        Constructor.

        Parameters:
        username - the username presented to the + DaoAuthenticationProvider
        password - the password that should be presented to the + DaoAuthenticationProvider
        enabled - set to true if the user is enabled
        accountNonExpired - set to true if the account has not expired
        credentialsNonExpired - set to true if the credentials have not expired
        accountNonLocked - set to true if the account is not locked
        authorities - the authorities that should be granted to the caller if they + presented the correct username and password and the user is enabled. Not null.
        id - the id of the domain class instance used to populate this

        +
      • +
      + +
    • +
    + + + + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/GrailsUserDetailsService.html b/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/GrailsUserDetailsService.html new file mode 100644 index 000000000..881baede8 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/GrailsUserDetailsService.html @@ -0,0 +1,261 @@ + + + + + + + + + + + GrailsUserDetailsService (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.userdetails
+ +

[Groovy] Interface GrailsUserDetailsService

+
+
+ +
+
    +
  • + + +
    +
    + +
    interface GrailsUserDetailsService
    +extends org.springframework.security.core.userdetails.UserDetailsService
    + +

    Extension of the standard interface that allows specifying whether or not to load roles + from the database, e.g. for LDAP where role information is inferred from LDAP group membership.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        abstract org.springframework.security.core.userdetails.UserDetailsloadUserByUsername(java.lang.String username, boolean loadRoles)
        Locates the user based on the username.
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        interface org.springframework.security.core.userdetails.UserDetailsServiceorg.springframework.security.core.userdetails.UserDetailsService#loadUserByUsername(java.lang.String)
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        abstract org.springframework.security.core.userdetails.UserDetails loadUserByUsername(java.lang.String username, boolean loadRoles)

        +

        Locates the user based on the username.

        throws:
        UsernameNotFoundException if the user could not be found
        throws:
        DataAccessException if user could not be found for a repository-specific reason
        Parameters:
        username - the username identifying the user whose data is required.
        loadRoles - whether to load roles at the same time as loading the user
        Returns:
        a fully populated user record (never null)

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/NoStackUsernameNotFoundException.html b/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/NoStackUsernameNotFoundException.html new file mode 100644 index 000000000..8c1c13e75 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/NoStackUsernameNotFoundException.html @@ -0,0 +1,303 @@ + + + + + + + + + + + NoStackUsernameNotFoundException (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.userdetails
+ +

[Groovy] Class NoStackUsernameNotFoundException

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class NoStackUsernameNotFoundException
    +extends org.springframework.security.core.userdetails.UsernameNotFoundException
    + +

    Lightweight exception that avoids the cost of filling in the stack frames.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        java.lang.ThrowablefillInStackTrace()
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class org.springframework.security.core.userdetails.UsernameNotFoundExceptionorg.springframework.security.core.userdetails.UsernameNotFoundException#printStackTrace(), org.springframework.security.core.userdetails.UsernameNotFoundException#printStackTrace(java.io.PrintWriter), org.springframework.security.core.userdetails.UsernameNotFoundException#printStackTrace(java.io.PrintStream), org.springframework.security.core.userdetails.UsernameNotFoundException#fillInStackTrace(), org.springframework.security.core.userdetails.UsernameNotFoundException#getCause(), org.springframework.security.core.userdetails.UsernameNotFoundException#initCause(java.lang.Throwable), org.springframework.security.core.userdetails.UsernameNotFoundException#toString(), org.springframework.security.core.userdetails.UsernameNotFoundException#getMessage(), org.springframework.security.core.userdetails.UsernameNotFoundException#getSuppressed(), org.springframework.security.core.userdetails.UsernameNotFoundException#getLocalizedMessage(), org.springframework.security.core.userdetails.UsernameNotFoundException#getStackTrace(), org.springframework.security.core.userdetails.UsernameNotFoundException#setStackTrace([Ljava.lang.StackTraceElement;), org.springframework.security.core.userdetails.UsernameNotFoundException#addSuppressed(java.lang.Throwable), org.springframework.security.core.userdetails.UsernameNotFoundException#wait(long), org.springframework.security.core.userdetails.UsernameNotFoundException#wait(long, int), org.springframework.security.core.userdetails.UsernameNotFoundException#wait(), org.springframework.security.core.userdetails.UsernameNotFoundException#equals(java.lang.Object), org.springframework.security.core.userdetails.UsernameNotFoundException#hashCode(), org.springframework.security.core.userdetails.UsernameNotFoundException#getClass(), org.springframework.security.core.userdetails.UsernameNotFoundException#notify(), org.springframework.security.core.userdetails.UsernameNotFoundException#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        NoStackUsernameNotFoundException()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        @java.lang.Override +java.lang.Throwable fillInStackTrace()

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/package-frame.html b/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/package-frame.html new file mode 100644 index 000000000..32c468761 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/package-frame.html @@ -0,0 +1,74 @@ + + + + + grails.plugin.springsecurity.userdetails + + + + + + + + + + +
+ grails.plugin.springsecurity.userdetails +
+ + + +
+

Interfaces

+ +
+ + + + +
+

Classes

+ +
+ + + + +
+

Exceptions

+ +
+ + + + + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/package-summary.html b/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/package-summary.html new file mode 100644 index 000000000..7ee42cfe2 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/userdetails/package-summary.html @@ -0,0 +1,225 @@ + + + + + +grails.plugin.springsecurity.userdetails (spring-security-core 6.0.2 API) + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + +
+

Package grails.plugin.springsecurity.userdetails

+
+ + + +
+ + +
+
    +
  • + + + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    + + GrailsUserDetailsService + + Extension of the standard interface that allows specifying whether or not to load roles + from the database, e.g. for LDAP where role information is inferred from LDAP group membership.
    +
  • +
+
+ + + + +
+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    + + DefaultPostAuthenticationChecks + + Copy of the private class in AbstractUserDetailsAuthenticationProvider + to make subclassing or replacement easier.
    + + DefaultPreAuthenticationChecks + + Copy of the private class in AbstractUserDetailsAuthenticationProvider + to make subclassing or replacement easier.
    + + GormUserDetailsService + + Default implementation of GrailsUserDetailsService that uses + domain classes to load users and roles.
    + + GrailsUser + + Extends the default Spring Security user class to contain the ID for efficient lookup + of the domain class from the Authentication.
    +
  • +
+
+ + + + +
+
    +
  • + + + + + + + + + + + + + +
    Exception Summary 
    ExceptionDescription
    + + NoStackUsernameNotFoundException + + Lightweight exception that avoids the cost of filling in the stack frames.
    +
  • +
+
+ + + + + +
+ + +
+ + + + + +
+ + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/GrailsRedirectStrategy.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/GrailsRedirectStrategy.html new file mode 100644 index 000000000..90c6c4dad --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/GrailsRedirectStrategy.html @@ -0,0 +1,376 @@ + + + + + + + + + + + GrailsRedirectStrategy (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web
+ +

[Groovy] Class GrailsRedirectStrategy

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.web.RedirectStrategy
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +@groovy.util.logging.Slf4j
    +class GrailsRedirectStrategy
    +extends java.lang.Object
    +implements org.springframework.security.web.RedirectStrategy
    + +

    Builds absolute urls when using header check channel security to prevent the + container from generating urls with an incorrect scheme.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + + + + + + +
        Properties 
        TypeName and description
        org.springframework.security.web.PortResolver portResolver
        Dependency injection for the port resolver.
        boolean useHeaderCheckChannelSecurity
        Dependency injection for useHeaderCheckChannelSecurity.
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      + +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        protected java.lang.StringcalculateRedirectUrl(javax.servlet.http.HttpServletRequest request, java.lang.String url)
        voidsendRedirect(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.String url)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        org.springframework.security.web.PortResolver portResolver

        +

        Dependency injection for the port resolver.

        +
      • +
      + + +
        +
      • +

        boolean useHeaderCheckChannelSecurity

        +

        Dependency injection for useHeaderCheckChannelSecurity.

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        GrailsRedirectStrategy()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        protected java.lang.String calculateRedirectUrl(javax.servlet.http.HttpServletRequest request, java.lang.String url)

        +

        +
      • +
      + + +
        +
      • +

        void sendRedirect(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.String url)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/GrailsSecurityFilterChain.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/GrailsSecurityFilterChain.html new file mode 100644 index 000000000..845ce7105 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/GrailsSecurityFilterChain.html @@ -0,0 +1,388 @@ + + + + + + + + + + + GrailsSecurityFilterChain (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web
+ +

[Groovy] Class GrailsSecurityFilterChain

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.web.SecurityFilterChain
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +@groovy.util.logging.Slf4j
    +class GrailsSecurityFilterChain
    +extends java.lang.Object
    +implements org.springframework.security.web.SecurityFilterChain
    + +

    Based on org.springframework.security.web.DefaultSecurityFilterChain which is final.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + +
        Properties 
        TypeName and description
        java.util.List<javax.servlet.Filter> filters
        java.lang.String matcherPattern
        org.springframework.security.web.util.matcher.RequestMatcher requestMatcher
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      +
        + + + + + + + + + + +
        Constructors 
        Constructor and description
        + GrailsSecurityFilterChain + (java.lang.String matcherPattern, java.util.List<javax.servlet.Filter> filters)
        +
      +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        booleanmatches(javax.servlet.http.HttpServletRequest request)
        java.lang.StringtoString()
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        final java.util.List<javax.servlet.Filter> filters

        +

        +
      • +
      + + +
        +
      • +

        final java.lang.String matcherPattern

        +

        +
      • +
      + + +
        +
      • +

        final org.springframework.security.web.util.matcher.RequestMatcher requestMatcher

        +

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        GrailsSecurityFilterChain(java.lang.String matcherPattern, java.util.List<javax.servlet.Filter> filters)

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        boolean matches(javax.servlet.http.HttpServletRequest request)

        +

        +
      • +
      + + +
        +
      • +

        java.lang.String toString()

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/NullFilterChainValidator.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/NullFilterChainValidator.html new file mode 100644 index 000000000..642246297 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/NullFilterChainValidator.html @@ -0,0 +1,308 @@ + + + + + + + + + + + NullFilterChainValidator (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web
+ +

[Groovy] Class NullFilterChainValidator

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.web.FilterChainProxy$FilterChainValidator
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class NullFilterChainValidator
    +extends java.lang.Object
    +implements org.springframework.security.web.FilterChainProxy$FilterChainValidator
    + +

    No-op validator.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + +
      +
    • +

      Constructor Summary

      + +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voidvalidate(org.springframework.security.web.FilterChainProxy filterChainProxy)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        NullFilterChainValidator()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        void validate(org.springframework.security.web.FilterChainProxy filterChainProxy)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/SecurityRequestHolder.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/SecurityRequestHolder.html new file mode 100644 index 000000000..9b1c45d2a --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/SecurityRequestHolder.html @@ -0,0 +1,304 @@ + + + + + + + + + + + SecurityRequestHolder (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web
+ +

[Groovy] Class SecurityRequestHolder

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +final class SecurityRequestHolder
    +extends java.lang.Object
    + +

    Uses a java.lang.ThreadLocal to store the current request and response.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        static javax.servlet.http.HttpServletRequestgetRequest()
        Get the current request.
        static javax.servlet.http.HttpServletResponsegetResponse()
        Get the current response.
        static voidreset()
        Clear the saved request.
        static voidset(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
        Set the current request and response.
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        static javax.servlet.http.HttpServletRequest getRequest()

        +

        Get the current request.

        Returns:
        the request

        +
      • +
      + + +
        +
      • +

        static javax.servlet.http.HttpServletResponse getResponse()

        +

        Get the current response.

        Returns:
        the response

        +
      • +
      + + +
        +
      • +

        static void reset()

        +

        Clear the saved request.

        +
      • +
      + + +
        +
      • +

        static void set(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)

        +

        Set the current request and response.

        Parameters:
        request - the request
        response - the response

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/SecurityRequestHolderFilter.1.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/SecurityRequestHolderFilter.1.html new file mode 100644 index 000000000..4360b6418 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/SecurityRequestHolderFilter.1.html @@ -0,0 +1,347 @@ + + + + + + + + + + + SecurityRequestHolderFilter.1 (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web
+ +

[Groovy] Class SecurityRequestHolderFilter.1

+
+
+ +
+
    +
  • + + + +
    +
    + +
    class SecurityRequestHolderFilter.1
    +extends javax.servlet.http.HttpServletRequestWrapper
    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +
        + + + + + + + + + + + +
        Inherited fields 
        Fields inherited from classFields
        class javax.servlet.http.HttpServletRequestWrapperBASIC_AUTH, FORM_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH
        +
      +
    • + +
    + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        java.lang.StringgetScheme()
        intgetServerPort()
        booleanisSecure()
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class javax.servlet.http.HttpServletRequestWrapperjavax.servlet.http.HttpServletRequestWrapper#getHeader(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getHeaders(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getQueryString(), javax.servlet.http.HttpServletRequestWrapper#upgrade(java.lang.Class), javax.servlet.http.HttpServletRequestWrapper#getCookies(), javax.servlet.http.HttpServletRequestWrapper#getUserPrincipal(), javax.servlet.http.HttpServletRequestWrapper#login(java.lang.String, java.lang.String), javax.servlet.http.HttpServletRequestWrapper#logout(), javax.servlet.http.HttpServletRequestWrapper#authenticate(javax.servlet.http.HttpServletResponse), javax.servlet.http.HttpServletRequestWrapper#getRequestURI(), javax.servlet.http.HttpServletRequestWrapper#getAuthType(), javax.servlet.http.HttpServletRequestWrapper#getSession(), javax.servlet.http.HttpServletRequestWrapper#getSession(boolean), javax.servlet.http.HttpServletRequestWrapper#getParts(), javax.servlet.http.HttpServletRequestWrapper#getContextPath(), javax.servlet.http.HttpServletRequestWrapper#getDateHeader(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getHeaderNames(), javax.servlet.http.HttpServletRequestWrapper#getIntHeader(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getHttpServletMapping(), javax.servlet.http.HttpServletRequestWrapper#getPathInfo(), javax.servlet.http.HttpServletRequestWrapper#getPathTranslated(), javax.servlet.http.HttpServletRequestWrapper#newPushBuilder(), javax.servlet.http.HttpServletRequestWrapper#getRemoteUser(), javax.servlet.http.HttpServletRequestWrapper#isUserInRole(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getRequestedSessionId(), javax.servlet.http.HttpServletRequestWrapper#getRequestURL(), javax.servlet.http.HttpServletRequestWrapper#getServletPath(), javax.servlet.http.HttpServletRequestWrapper#changeSessionId(), javax.servlet.http.HttpServletRequestWrapper#isRequestedSessionIdValid(), javax.servlet.http.HttpServletRequestWrapper#isRequestedSessionIdFromCookie(), javax.servlet.http.HttpServletRequestWrapper#isRequestedSessionIdFromURL(), javax.servlet.http.HttpServletRequestWrapper#isRequestedSessionIdFromUrl(), javax.servlet.http.HttpServletRequestWrapper#getPart(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getTrailerFields(), javax.servlet.http.HttpServletRequestWrapper#isTrailerFieldsReady(), javax.servlet.http.HttpServletRequestWrapper#getMethod(), javax.servlet.http.HttpServletRequestWrapper#getContentLength(), javax.servlet.http.HttpServletRequestWrapper#setAttribute(java.lang.String, java.lang.Object), javax.servlet.http.HttpServletRequestWrapper#getAttribute(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getContentLengthLong(), javax.servlet.http.HttpServletRequestWrapper#getContentType(), javax.servlet.http.HttpServletRequestWrapper#getLocalName(), javax.servlet.http.HttpServletRequestWrapper#getRemotePort(), javax.servlet.http.HttpServletRequestWrapper#isSecure(), javax.servlet.http.HttpServletRequestWrapper#removeAttribute(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getParameter(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getReader(), javax.servlet.http.HttpServletRequestWrapper#isWrapperFor(java.lang.Class), javax.servlet.http.HttpServletRequestWrapper#isWrapperFor(javax.servlet.ServletRequest), javax.servlet.http.HttpServletRequestWrapper#getRequest(), javax.servlet.http.HttpServletRequestWrapper#getAttributeNames(), javax.servlet.http.HttpServletRequestWrapper#getServletContext(), javax.servlet.http.HttpServletRequestWrapper#getCharacterEncoding(), javax.servlet.http.HttpServletRequestWrapper#setCharacterEncoding(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getParameterNames(), javax.servlet.http.HttpServletRequestWrapper#getParameterValues(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getParameterMap(), javax.servlet.http.HttpServletRequestWrapper#getServerName(), javax.servlet.http.HttpServletRequestWrapper#getServerPort(), javax.servlet.http.HttpServletRequestWrapper#getRemoteAddr(), javax.servlet.http.HttpServletRequestWrapper#getRemoteHost(), javax.servlet.http.HttpServletRequestWrapper#getLocales(), javax.servlet.http.HttpServletRequestWrapper#getRequestDispatcher(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getRealPath(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getLocalAddr(), javax.servlet.http.HttpServletRequestWrapper#startAsync(javax.servlet.ServletRequest, javax.servlet.ServletResponse), javax.servlet.http.HttpServletRequestWrapper#startAsync(), javax.servlet.http.HttpServletRequestWrapper#isAsyncStarted(), javax.servlet.http.HttpServletRequestWrapper#isAsyncSupported(), javax.servlet.http.HttpServletRequestWrapper#getAsyncContext(), javax.servlet.http.HttpServletRequestWrapper#getDispatcherType(), javax.servlet.http.HttpServletRequestWrapper#setRequest(javax.servlet.ServletRequest), javax.servlet.http.HttpServletRequestWrapper#getLocale(), javax.servlet.http.HttpServletRequestWrapper#getLocalPort(), javax.servlet.http.HttpServletRequestWrapper#getProtocol(), javax.servlet.http.HttpServletRequestWrapper#getScheme(), javax.servlet.http.HttpServletRequestWrapper#getInputStream(), javax.servlet.http.HttpServletRequestWrapper#wait(long), javax.servlet.http.HttpServletRequestWrapper#wait(long, int), javax.servlet.http.HttpServletRequestWrapper#wait(), javax.servlet.http.HttpServletRequestWrapper#equals(java.lang.Object), javax.servlet.http.HttpServletRequestWrapper#toString(), javax.servlet.http.HttpServletRequestWrapper#hashCode(), javax.servlet.http.HttpServletRequestWrapper#getClass(), javax.servlet.http.HttpServletRequestWrapper#notify(), javax.servlet.http.HttpServletRequestWrapper#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        SecurityRequestHolderFilter.1()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        java.lang.String getScheme()

        +

        +
      • +
      + + +
        +
      • +

        int getServerPort()

        +

        +
      • +
      + + +
        +
      • +

        boolean isSecure()

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/SecurityRequestHolderFilter.2.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/SecurityRequestHolderFilter.2.html new file mode 100644 index 000000000..780f9651c --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/SecurityRequestHolderFilter.2.html @@ -0,0 +1,347 @@ + + + + + + + + + + + SecurityRequestHolderFilter.2 (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web
+ +

[Groovy] Class SecurityRequestHolderFilter.2

+
+
+ +
+
    +
  • + + + +
    +
    + +
    class SecurityRequestHolderFilter.2
    +extends javax.servlet.http.HttpServletRequestWrapper
    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +
        + + + + + + + + + + + +
        Inherited fields 
        Fields inherited from classFields
        class javax.servlet.http.HttpServletRequestWrapperBASIC_AUTH, FORM_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH
        +
      +
    • + +
    + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        java.lang.StringgetScheme()
        intgetServerPort()
        booleanisSecure()
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class javax.servlet.http.HttpServletRequestWrapperjavax.servlet.http.HttpServletRequestWrapper#getHeader(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getHeaders(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getQueryString(), javax.servlet.http.HttpServletRequestWrapper#upgrade(java.lang.Class), javax.servlet.http.HttpServletRequestWrapper#getCookies(), javax.servlet.http.HttpServletRequestWrapper#getUserPrincipal(), javax.servlet.http.HttpServletRequestWrapper#login(java.lang.String, java.lang.String), javax.servlet.http.HttpServletRequestWrapper#logout(), javax.servlet.http.HttpServletRequestWrapper#authenticate(javax.servlet.http.HttpServletResponse), javax.servlet.http.HttpServletRequestWrapper#getRequestURI(), javax.servlet.http.HttpServletRequestWrapper#getAuthType(), javax.servlet.http.HttpServletRequestWrapper#getSession(), javax.servlet.http.HttpServletRequestWrapper#getSession(boolean), javax.servlet.http.HttpServletRequestWrapper#getParts(), javax.servlet.http.HttpServletRequestWrapper#getContextPath(), javax.servlet.http.HttpServletRequestWrapper#getDateHeader(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getHeaderNames(), javax.servlet.http.HttpServletRequestWrapper#getIntHeader(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getHttpServletMapping(), javax.servlet.http.HttpServletRequestWrapper#getPathInfo(), javax.servlet.http.HttpServletRequestWrapper#getPathTranslated(), javax.servlet.http.HttpServletRequestWrapper#newPushBuilder(), javax.servlet.http.HttpServletRequestWrapper#getRemoteUser(), javax.servlet.http.HttpServletRequestWrapper#isUserInRole(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getRequestedSessionId(), javax.servlet.http.HttpServletRequestWrapper#getRequestURL(), javax.servlet.http.HttpServletRequestWrapper#getServletPath(), javax.servlet.http.HttpServletRequestWrapper#changeSessionId(), javax.servlet.http.HttpServletRequestWrapper#isRequestedSessionIdValid(), javax.servlet.http.HttpServletRequestWrapper#isRequestedSessionIdFromCookie(), javax.servlet.http.HttpServletRequestWrapper#isRequestedSessionIdFromURL(), javax.servlet.http.HttpServletRequestWrapper#isRequestedSessionIdFromUrl(), javax.servlet.http.HttpServletRequestWrapper#getPart(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getTrailerFields(), javax.servlet.http.HttpServletRequestWrapper#isTrailerFieldsReady(), javax.servlet.http.HttpServletRequestWrapper#getMethod(), javax.servlet.http.HttpServletRequestWrapper#getContentLength(), javax.servlet.http.HttpServletRequestWrapper#setAttribute(java.lang.String, java.lang.Object), javax.servlet.http.HttpServletRequestWrapper#getAttribute(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getContentLengthLong(), javax.servlet.http.HttpServletRequestWrapper#getContentType(), javax.servlet.http.HttpServletRequestWrapper#getLocalName(), javax.servlet.http.HttpServletRequestWrapper#getRemotePort(), javax.servlet.http.HttpServletRequestWrapper#isSecure(), javax.servlet.http.HttpServletRequestWrapper#removeAttribute(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getParameter(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getReader(), javax.servlet.http.HttpServletRequestWrapper#isWrapperFor(java.lang.Class), javax.servlet.http.HttpServletRequestWrapper#isWrapperFor(javax.servlet.ServletRequest), javax.servlet.http.HttpServletRequestWrapper#getRequest(), javax.servlet.http.HttpServletRequestWrapper#getAttributeNames(), javax.servlet.http.HttpServletRequestWrapper#getServletContext(), javax.servlet.http.HttpServletRequestWrapper#getCharacterEncoding(), javax.servlet.http.HttpServletRequestWrapper#setCharacterEncoding(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getParameterNames(), javax.servlet.http.HttpServletRequestWrapper#getParameterValues(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getParameterMap(), javax.servlet.http.HttpServletRequestWrapper#getServerName(), javax.servlet.http.HttpServletRequestWrapper#getServerPort(), javax.servlet.http.HttpServletRequestWrapper#getRemoteAddr(), javax.servlet.http.HttpServletRequestWrapper#getRemoteHost(), javax.servlet.http.HttpServletRequestWrapper#getLocales(), javax.servlet.http.HttpServletRequestWrapper#getRequestDispatcher(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getRealPath(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getLocalAddr(), javax.servlet.http.HttpServletRequestWrapper#startAsync(javax.servlet.ServletRequest, javax.servlet.ServletResponse), javax.servlet.http.HttpServletRequestWrapper#startAsync(), javax.servlet.http.HttpServletRequestWrapper#isAsyncStarted(), javax.servlet.http.HttpServletRequestWrapper#isAsyncSupported(), javax.servlet.http.HttpServletRequestWrapper#getAsyncContext(), javax.servlet.http.HttpServletRequestWrapper#getDispatcherType(), javax.servlet.http.HttpServletRequestWrapper#setRequest(javax.servlet.ServletRequest), javax.servlet.http.HttpServletRequestWrapper#getLocale(), javax.servlet.http.HttpServletRequestWrapper#getLocalPort(), javax.servlet.http.HttpServletRequestWrapper#getProtocol(), javax.servlet.http.HttpServletRequestWrapper#getScheme(), javax.servlet.http.HttpServletRequestWrapper#getInputStream(), javax.servlet.http.HttpServletRequestWrapper#wait(long), javax.servlet.http.HttpServletRequestWrapper#wait(long, int), javax.servlet.http.HttpServletRequestWrapper#wait(), javax.servlet.http.HttpServletRequestWrapper#equals(java.lang.Object), javax.servlet.http.HttpServletRequestWrapper#toString(), javax.servlet.http.HttpServletRequestWrapper#hashCode(), javax.servlet.http.HttpServletRequestWrapper#getClass(), javax.servlet.http.HttpServletRequestWrapper#notify(), javax.servlet.http.HttpServletRequestWrapper#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        SecurityRequestHolderFilter.2()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        java.lang.String getScheme()

        +

        +
      • +
      + + +
        +
      • +

        int getServerPort()

        +

        +
      • +
      + + +
        +
      • +

        boolean isSecure()

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/SecurityRequestHolderFilter.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/SecurityRequestHolderFilter.html new file mode 100644 index 000000000..0f47991aa --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/SecurityRequestHolderFilter.html @@ -0,0 +1,470 @@ + + + + + + + + + + + SecurityRequestHolderFilter (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web
+ +

[Groovy] Class SecurityRequestHolderFilter

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +@groovy.util.logging.Slf4j
    +class SecurityRequestHolderFilter
    +extends org.springframework.web.filter.GenericFilterBean
    + +

    Stores the request and response in the SecurityRequestHolder. Also wraps the request in a + wrapper that is aware of the X-Forwarded-Proto header and returns the correct value from isSecure(), + getScheme(), and getServerPort() if the header is present.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voiddoFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse response, javax.servlet.FilterChain chain)
        protected javax.servlet.http.HttpServletRequestwrapRequest(javax.servlet.http.HttpServletRequest request)
        If using header check channel security, look for the specified header (typically 'X-Forwarded-Proto') + and if found, return a request wrapper that returns the correct values for isSecure(), getScheme(), + and getServerPort().
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class org.springframework.web.filter.GenericFilterBeanorg.springframework.web.filter.GenericFilterBean#getEnvironment(), org.springframework.web.filter.GenericFilterBean#setEnvironment(org.springframework.core.env.Environment), org.springframework.web.filter.GenericFilterBean#afterPropertiesSet(), org.springframework.web.filter.GenericFilterBean#setServletContext(javax.servlet.ServletContext), org.springframework.web.filter.GenericFilterBean#setBeanName(java.lang.String), org.springframework.web.filter.GenericFilterBean#getFilterConfig(), org.springframework.web.filter.GenericFilterBean#init(javax.servlet.FilterConfig), org.springframework.web.filter.GenericFilterBean#destroy(), org.springframework.web.filter.GenericFilterBean#wait(long), org.springframework.web.filter.GenericFilterBean#wait(long, int), org.springframework.web.filter.GenericFilterBean#wait(), org.springframework.web.filter.GenericFilterBean#equals(java.lang.Object), org.springframework.web.filter.GenericFilterBean#toString(), org.springframework.web.filter.GenericFilterBean#hashCode(), org.springframework.web.filter.GenericFilterBean#getClass(), org.springframework.web.filter.GenericFilterBean#notify(), org.springframework.web.filter.GenericFilterBean#notifyAll(), org.springframework.web.filter.GenericFilterBean#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        java.lang.String insecureHeaderName

        +

        +
      • +
      + + +
        +
      • +

        java.lang.String insecureHeaderValue

        +

        +
      • +
      + + +
        +
      • +

        org.springframework.security.web.PortMapper portMapper

        +

        +
      • +
      + + +
        +
      • +

        org.springframework.security.web.PortResolver portResolver

        +

        +
      • +
      + + +
        +
      • +

        java.lang.String secureHeaderName

        +

        +
      • +
      + + +
        +
      • +

        java.lang.String secureHeaderValue

        +

        +
      • +
      + + +
        +
      • +

        boolean useHeaderCheckChannelSecurity

        +

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        SecurityRequestHolderFilter()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse response, javax.servlet.FilterChain chain)

        +

        +
      • +
      + + +
        +
      • +

        protected javax.servlet.http.HttpServletRequest wrapRequest(javax.servlet.http.HttpServletRequest request)

        +

        If using header check channel security, look for the specified header (typically 'X-Forwarded-Proto') + and if found, return a request wrapper that returns the correct values for isSecure(), getScheme(), + and getServerPort(). Note that the values are switched intentionally since they're configured for + channel security.

        Parameters:
        request - the original request
        Returns:
        the original request or a wrapper for it

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/UpdateRequestContextHolderExceptionTranslationFilter.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/UpdateRequestContextHolderExceptionTranslationFilter.html new file mode 100644 index 000000000..2a455bde8 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/UpdateRequestContextHolderExceptionTranslationFilter.html @@ -0,0 +1,318 @@ + + + + + + + + + + + UpdateRequestContextHolderExceptionTranslationFilter (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web
+ +

[Groovy] Class UpdateRequestContextHolderExceptionTranslationFilter

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class UpdateRequestContextHolderExceptionTranslationFilter
    +extends org.springframework.security.web.access.ExceptionTranslationFilter
    + +

    Replaces the current GrailsWebRequest with one that delegates to the real current instance but uses the request and + response from the filter chain instead of the cached instances from earlier in the chain to ensure that controllers + and other classes that access the request from the thread-local RequestContextHolder use the correct instances.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voiddoFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res, javax.servlet.FilterChain chain)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class org.springframework.security.web.access.ExceptionTranslationFilterorg.springframework.security.web.access.ExceptionTranslationFilter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain), org.springframework.security.web.access.ExceptionTranslationFilter#afterPropertiesSet(), org.springframework.security.web.access.ExceptionTranslationFilter#setMessageSource(org.springframework.context.MessageSource), org.springframework.security.web.access.ExceptionTranslationFilter#getAuthenticationEntryPoint(), org.springframework.security.web.access.ExceptionTranslationFilter#setAccessDeniedHandler(org.springframework.security.web.access.AccessDeniedHandler), org.springframework.security.web.access.ExceptionTranslationFilter#setAuthenticationTrustResolver(org.springframework.security.authentication.AuthenticationTrustResolver), org.springframework.security.web.access.ExceptionTranslationFilter#setThrowableAnalyzer(org.springframework.security.web.util.ThrowableAnalyzer), org.springframework.security.web.access.ExceptionTranslationFilter#setSecurityContextHolderStrategy(org.springframework.security.core.context.SecurityContextHolderStrategy), org.springframework.security.web.access.ExceptionTranslationFilter#getEnvironment(), org.springframework.security.web.access.ExceptionTranslationFilter#setEnvironment(org.springframework.core.env.Environment), org.springframework.security.web.access.ExceptionTranslationFilter#setServletContext(javax.servlet.ServletContext), org.springframework.security.web.access.ExceptionTranslationFilter#setBeanName(java.lang.String), org.springframework.security.web.access.ExceptionTranslationFilter#getFilterConfig(), org.springframework.security.web.access.ExceptionTranslationFilter#init(javax.servlet.FilterConfig), org.springframework.security.web.access.ExceptionTranslationFilter#destroy(), org.springframework.security.web.access.ExceptionTranslationFilter#wait(long), org.springframework.security.web.access.ExceptionTranslationFilter#wait(long, int), org.springframework.security.web.access.ExceptionTranslationFilter#wait(), org.springframework.security.web.access.ExceptionTranslationFilter#equals(java.lang.Object), org.springframework.security.web.access.ExceptionTranslationFilter#toString(), org.springframework.security.web.access.ExceptionTranslationFilter#hashCode(), org.springframework.security.web.access.ExceptionTranslationFilter#getClass(), org.springframework.security.web.access.ExceptionTranslationFilter#notify(), org.springframework.security.web.access.ExceptionTranslationFilter#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        UpdateRequestContextHolderExceptionTranslationFilter(org.springframework.security.web.AuthenticationEntryPoint authenticationEntryPoint)

        +

        +
      • +
      + + +
        +
      • +

        UpdateRequestContextHolderExceptionTranslationFilter(org.springframework.security.web.AuthenticationEntryPoint authenticationEntryPoint, org.springframework.security.web.savedrequest.RequestCache requestCache)

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res, javax.servlet.FilterChain chain)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/AjaxAwareAccessDeniedHandler.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/AjaxAwareAccessDeniedHandler.html new file mode 100644 index 000000000..7fb607ec7 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/AjaxAwareAccessDeniedHandler.html @@ -0,0 +1,513 @@ + + + + + + + + + + + AjaxAwareAccessDeniedHandler (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.access
+ +

[Groovy] Class AjaxAwareAccessDeniedHandler

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.web.access.AccessDeniedHandler, org.springframework.beans.factory.InitializingBean
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +@groovy.util.logging.Slf4j
    +class AjaxAwareAccessDeniedHandler
    +extends java.lang.Object
    +implements org.springframework.security.web.access.AccessDeniedHandler, org.springframework.beans.factory.InitializingBean
    + +

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +

      Field Summary

      +
        + + + + + + + + + + + + + + + + + + + + +
        Fields 
        ModifiersNameDescription
        protected java.lang.String ajaxErrorPage
        protected java.lang.String errorPage
        +
      +
    • + +
    + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Properties 
        TypeName and description
        org.springframework.security.authentication.AuthenticationTrustResolver authenticationTrustResolver
        Dependency injection for the org.springframework.security.authentication.AuthenticationTrustResolver.
        org.springframework.security.web.PortResolver portResolver
        Dependency injection for the port resolver.
        org.springframework.security.web.savedrequest.RequestCache requestCache
        Dependency injection for the request cache.
        boolean useForward
        Dependency injection for whether to forward to render the denied page or redirect.
        +
      +
    • +
    + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voidafterPropertiesSet()
        protected org.springframework.security.core.AuthenticationgetAuthentication()
        voidhandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, org.springframework.security.access.AccessDeniedException e)
        protected booleanisLoggedIn()
        voidsetAjaxErrorPage(java.lang.String page)
        Dependency injection for the Ajax error page, e.g.
        voidsetErrorPage(java.lang.String page)
        Dependency injection for the error page, e.g.
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        protected java.lang.String ajaxErrorPage

        +

        +
      • +
      + + +
        +
      • +

        protected java.lang.String errorPage

        +

        +
      • +
      + +
    • +
    + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        org.springframework.security.authentication.AuthenticationTrustResolver authenticationTrustResolver

        +

        Dependency injection for the org.springframework.security.authentication.AuthenticationTrustResolver.

        +
      • +
      + + +
        +
      • +

        org.springframework.security.web.PortResolver portResolver

        +

        Dependency injection for the port resolver.

        +
      • +
      + + +
        +
      • +

        org.springframework.security.web.savedrequest.RequestCache requestCache

        +

        Dependency injection for the request cache.

        +
      • +
      + + +
        +
      • +

        boolean useForward

        +

        Dependency injection for whether to forward to render the denied page or redirect.

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        AjaxAwareAccessDeniedHandler()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        void afterPropertiesSet()

        +

        +
      • +
      + + +
        +
      • +

        protected org.springframework.security.core.Authentication getAuthentication()

        +

        +
      • +
      + + +
        +
      • +

        void handle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, org.springframework.security.access.AccessDeniedException e)

        +

        +
      • +
      + + +
        +
      • +

        protected boolean isLoggedIn()

        +

        +
      • +
      + + +
        +
      • +

        void setAjaxErrorPage(java.lang.String page)

        +

        Dependency injection for the Ajax error page, e.g. '/login/ajaxDenied'.

        Parameters:
        page - the page

        +
      • +
      + + +
        +
      • +

        void setErrorPage(java.lang.String page)

        +

        Dependency injection for the error page, e.g. '/login/denied'.

        Parameters:
        page - the page

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/DefaultThrowableAnalyzer.1.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/DefaultThrowableAnalyzer.1.html new file mode 100644 index 000000000..b271079dc --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/DefaultThrowableAnalyzer.1.html @@ -0,0 +1,299 @@ + + + + + + + + + + + DefaultThrowableAnalyzer.1 (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.access
+ +

[Groovy] Class DefaultThrowableAnalyzer.1

+
+
+ +
+
    +
  • + + + +
    +
    + +
    class DefaultThrowableAnalyzer.1
    +extends org.springframework.security.web.util.ThrowableCauseExtractor
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + +
      +
    • +

      Constructor Summary

      + +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        java.lang.ThrowableextractCause(java.lang.Throwable throwable)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        interface org.springframework.security.web.util.ThrowableCauseExtractororg.springframework.security.web.util.ThrowableCauseExtractor#extractCause(java.lang.Throwable)
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        DefaultThrowableAnalyzer.1()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        java.lang.Throwable extractCause(java.lang.Throwable throwable)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/DefaultThrowableAnalyzer.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/DefaultThrowableAnalyzer.html new file mode 100644 index 000000000..f3d4e5323 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/DefaultThrowableAnalyzer.html @@ -0,0 +1,346 @@ + + + + + + + + + + + DefaultThrowableAnalyzer (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.access
+ +

[Groovy] Class DefaultThrowableAnalyzer

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class DefaultThrowableAnalyzer
    +extends org.springframework.security.web.util.ThrowableAnalyzer
    + +

    Copy of org.springframework.security.web.access.ExceptionTranslationFilter.DefaultThrowableAnalyzer which is private.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + +
      +
    • +

      Nested Class Summary

      + +
    • +
    + + + + + + +
      +
    • +
        + + + + + + + + + + + +
        Inherited fields 
        Fields inherited from classFields
        class org.springframework.security.web.util.ThrowableAnalyzerDEFAULT_EXTRACTOR, INVOCATIONTARGET_EXTRACTOR
        +
      +
    • + +
    + + + + + + + + + + +
      +
    • +

      Constructor Summary

      + +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        protected voidinitExtractorMap()
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class org.springframework.security.web.util.ThrowableAnalyzerorg.springframework.security.web.util.ThrowableAnalyzer#determineCauseChain(java.lang.Throwable), org.springframework.security.web.util.ThrowableAnalyzer#getFirstThrowableOfType(java.lang.Class, [Ljava.lang.Throwable;), org.springframework.security.web.util.ThrowableAnalyzer#verifyThrowableHierarchy(java.lang.Throwable, java.lang.Class), org.springframework.security.web.util.ThrowableAnalyzer#wait(long), org.springframework.security.web.util.ThrowableAnalyzer#wait(long, int), org.springframework.security.web.util.ThrowableAnalyzer#wait(), org.springframework.security.web.util.ThrowableAnalyzer#equals(java.lang.Object), org.springframework.security.web.util.ThrowableAnalyzer#toString(), org.springframework.security.web.util.ThrowableAnalyzer#hashCode(), org.springframework.security.web.util.ThrowableAnalyzer#getClass(), org.springframework.security.web.util.ThrowableAnalyzer#notify(), org.springframework.security.web.util.ThrowableAnalyzer#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        DefaultThrowableAnalyzer()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        @java.lang.Override +protected void initExtractorMap()

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/GrailsWebInvocationPrivilegeEvaluator.1.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/GrailsWebInvocationPrivilegeEvaluator.1.html new file mode 100644 index 000000000..3c09255ff --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/GrailsWebInvocationPrivilegeEvaluator.1.html @@ -0,0 +1,299 @@ + + + + + + + + + + + GrailsWebInvocationPrivilegeEvaluator.1 (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.access
+ +

[Groovy] Class GrailsWebInvocationPrivilegeEvaluator.1

+
+
+ +
+
    +
  • + + + +
    +
    + +
    class GrailsWebInvocationPrivilegeEvaluator.1
    +extends javax.servlet.FilterChain
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voiddoFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        interface javax.servlet.FilterChainjavax.servlet.FilterChain#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        GrailsWebInvocationPrivilegeEvaluator.1()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/GrailsWebInvocationPrivilegeEvaluator.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/GrailsWebInvocationPrivilegeEvaluator.html new file mode 100644 index 000000000..a79fcd02a --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/GrailsWebInvocationPrivilegeEvaluator.html @@ -0,0 +1,413 @@ + + + + + + + + + + + GrailsWebInvocationPrivilegeEvaluator (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.access
+ +

[Groovy] Class GrailsWebInvocationPrivilegeEvaluator

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.util.logging.Slf4j
    +@groovy.transform.CompileStatic
    +class GrailsWebInvocationPrivilegeEvaluator
    +extends org.springframework.security.web.access.DefaultWebInvocationPrivilegeEvaluator
    + +

    createFilterInvocation() is private in the base class so this is required to create + a mock request that works with Grails - more methods get called than are expected in the mock request + that the base class uses.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + +
      +
    • +

      Field Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        ModifiersNameDescription
        protected static javax.servlet.FilterChain DUMMY_CHAIN
        protected static javax.servlet.http.HttpServletResponse DUMMY_RESPONSE
        protected org.springframework.security.access.intercept.AbstractSecurityInterceptor interceptor
        +
      +
    • + +
    + + + + + + + + + + +
      +
    • +

      Constructor Summary

      +
        + + + + + + + + + + +
        Constructors 
        Constructor and description
        + GrailsWebInvocationPrivilegeEvaluator + (org.springframework.security.access.intercept.AbstractSecurityInterceptor securityInterceptor)
        Constructor.
        +
      +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        protected org.springframework.security.web.FilterInvocationcreateFilterInvocation(java.lang.String contextPath, java.lang.String uri, java.lang.String method)
        booleanisAllowed(java.lang.String contextPath, java.lang.String uri, java.lang.String method, org.springframework.security.core.Authentication authentication)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class org.springframework.security.web.access.DefaultWebInvocationPrivilegeEvaluatororg.springframework.security.web.access.DefaultWebInvocationPrivilegeEvaluator#isAllowed(java.lang.String, java.lang.String, java.lang.String, org.springframework.security.core.Authentication), org.springframework.security.web.access.DefaultWebInvocationPrivilegeEvaluator#isAllowed(java.lang.String, org.springframework.security.core.Authentication), org.springframework.security.web.access.DefaultWebInvocationPrivilegeEvaluator#setServletContext(javax.servlet.ServletContext), org.springframework.security.web.access.DefaultWebInvocationPrivilegeEvaluator#wait(long), org.springframework.security.web.access.DefaultWebInvocationPrivilegeEvaluator#wait(long, int), org.springframework.security.web.access.DefaultWebInvocationPrivilegeEvaluator#wait(), org.springframework.security.web.access.DefaultWebInvocationPrivilegeEvaluator#equals(java.lang.Object), org.springframework.security.web.access.DefaultWebInvocationPrivilegeEvaluator#toString(), org.springframework.security.web.access.DefaultWebInvocationPrivilegeEvaluator#hashCode(), org.springframework.security.web.access.DefaultWebInvocationPrivilegeEvaluator#getClass(), org.springframework.security.web.access.DefaultWebInvocationPrivilegeEvaluator#notify(), org.springframework.security.web.access.DefaultWebInvocationPrivilegeEvaluator#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        protected static final javax.servlet.FilterChain DUMMY_CHAIN

        +

        +
      • +
      + + +
        +
      • +

        protected static final javax.servlet.http.HttpServletResponse DUMMY_RESPONSE

        +

        +
      • +
      + + +
        +
      • +

        protected org.springframework.security.access.intercept.AbstractSecurityInterceptor interceptor

        +

        +
      • +
      + +
    • +
    + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        GrailsWebInvocationPrivilegeEvaluator(org.springframework.security.access.intercept.AbstractSecurityInterceptor securityInterceptor)

        +

        Constructor.

        Parameters:
        securityInterceptor - the security interceptor

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        protected org.springframework.security.web.FilterInvocation createFilterInvocation(java.lang.String contextPath, java.lang.String uri, java.lang.String method)

        +

        +
      • +
      + + +
        +
      • +

        @java.lang.Override +boolean isAllowed(java.lang.String contextPath, java.lang.String uri, java.lang.String method, org.springframework.security.core.Authentication authentication)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/expression/WebExpressionConfigAttribute.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/expression/WebExpressionConfigAttribute.html new file mode 100644 index 000000000..efa25089a --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/expression/WebExpressionConfigAttribute.html @@ -0,0 +1,363 @@ + + + + + + + + + + + WebExpressionConfigAttribute (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.access.expression
+ +

[Groovy] Class WebExpressionConfigAttribute

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.access.ConfigAttribute
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class WebExpressionConfigAttribute
    +extends java.lang.Object
    +implements org.springframework.security.access.ConfigAttribute
    + +

    Simple expression configuration attribute for use in web request authorizations. + Based on the class of the same name in Spring Security which is package-default.

    Authors:
    Luke Taylor
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        org.springframework.expression.Expression authorizeExpression
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      +
        + + + + + + + + + + +
        Constructors 
        Constructor and description
        + WebExpressionConfigAttribute + (org.springframework.expression.Expression authorizeExpression)
        Constructor.
        +
      +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        java.lang.StringgetAttribute()
        java.lang.StringtoString()
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        final org.springframework.expression.Expression authorizeExpression

        +

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        WebExpressionConfigAttribute(org.springframework.expression.Expression authorizeExpression)

        +

        Constructor.

        Parameters:
        authorizeExpression - the expression

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        java.lang.String getAttribute()

        +

        +
      • +
      + + +
        +
      • +

        @java.lang.Override +java.lang.String toString()

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/expression/WebExpressionVoter.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/expression/WebExpressionVoter.html new file mode 100644 index 000000000..fc1d04176 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/expression/WebExpressionVoter.html @@ -0,0 +1,391 @@ + + + + + + + + + + + WebExpressionVoter (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.access.expression
+ +

[Groovy] Class WebExpressionVoter

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.access.AccessDecisionVoter<org.springframework.security.web.FilterInvocation>
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +@groovy.util.logging.Slf4j
    +class WebExpressionVoter
    +extends java.lang.Object
    +implements org.springframework.security.access.AccessDecisionVoter<org.springframework.security.web.FilterInvocation>
    + +

    Based on the class of the same name in Spring Security which uses the + package-default WebExpressionConfigAttribute.

    Authors:
    Luke Taylor
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        org.springframework.security.access.expression.SecurityExpressionHandler<org.springframework.security.web.FilterInvocation> expressionHandler
        Dependency injection for the expression handler.
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      +
        + + + + + + + + + + +
        Constructors 
        Constructor and description
        + WebExpressionVoter + ()
        +
      +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        protected WebExpressionConfigAttributefindConfigAttribute(java.util.Collection<org.springframework.security.access.ConfigAttribute> attributes)
        booleansupports(org.springframework.security.access.ConfigAttribute attribute)
        booleansupports(java.lang.Class<?> clazz)
        intvote(org.springframework.security.core.Authentication authentication, org.springframework.security.web.FilterInvocation fi, java.util.Collection<org.springframework.security.access.ConfigAttribute> attributes)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        org.springframework.security.access.expression.SecurityExpressionHandler<org.springframework.security.web.FilterInvocation> expressionHandler

        +

        Dependency injection for the expression handler.

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        WebExpressionVoter()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        protected WebExpressionConfigAttribute findConfigAttribute(java.util.Collection<org.springframework.security.access.ConfigAttribute> attributes)

        +

        +
      • +
      + + +
        +
      • +

        boolean supports(org.springframework.security.access.ConfigAttribute attribute)

        +

        +
      • +
      + + +
        +
      • +

        boolean supports(java.lang.Class<?> clazz)

        +

        +
      • +
      + + +
        +
      • +

        int vote(org.springframework.security.core.Authentication authentication, org.springframework.security.web.FilterInvocation fi, java.util.Collection<org.springframework.security.access.ConfigAttribute> attributes)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/expression/package-frame.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/expression/package-frame.html new file mode 100644 index 000000000..57609a6a3 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/expression/package-frame.html @@ -0,0 +1,58 @@ + + + + + grails.plugin.springsecurity.web.access.expression + + + + + + + + + + +
+ grails.plugin.springsecurity.web.access.expression +
+ + + + + +
+

Classes

+ +
+ + + + + + + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/expression/package-summary.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/expression/package-summary.html new file mode 100644 index 000000000..c5fb2055e --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/expression/package-summary.html @@ -0,0 +1,154 @@ + + + + + +grails.plugin.springsecurity.web.access.expression (spring-security-core 6.0.2 API) + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + +
+

Package grails.plugin.springsecurity.web.access.expression

+
+ + + +
+ + + + +
+
    +
  • + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    + + WebExpressionConfigAttribute + + Simple expression configuration attribute for use in web request authorizations. +
    + + WebExpressionVoter + + Based on the class of the same name in Spring Security which uses the + package-default WebExpressionConfigAttribute.
    +
  • +
+
+ + + + + + + +
+ + +
+ + + + + +
+ + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/intercept/AbstractFilterInvocationDefinition.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/intercept/AbstractFilterInvocationDefinition.html new file mode 100644 index 000000000..e008b97d6 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/intercept/AbstractFilterInvocationDefinition.html @@ -0,0 +1,756 @@ + + + + + + + + + + + AbstractFilterInvocationDefinition (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.access.intercept
+ +

[Groovy] Class AbstractFilterInvocationDefinition

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource
    +
    + + + +
    +
    + +
    @groovy.util.logging.Slf4j
    +@groovy.transform.CompileStatic
    +abstract class AbstractFilterInvocationDefinition
    +extends java.lang.Object
    +implements org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource
    + +

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +

      Field Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        ModifiersNameDescription
        protected static java.util.Collection<org.springframework.security.access.ConfigAttribute> ALLOW404
        protected static java.util.Collection<org.springframework.security.access.ConfigAttribute> DENY
        protected static java.lang.String ERROR404
        protected org.springframework.security.access.vote.AuthenticatedVoter authenticatedVoter
        protected java.util.List<InterceptedUrl> compiled
        protected boolean initialized
        protected org.springframework.context.support.MessageSourceAccessor messages
        protected org.springframework.security.access.vote.RoleVoter roleVoter
        protected org.springframework.util.AntPathMatcher urlMatcher
        protected org.springframework.web.util.UrlPathHelper urlPathHelper
        +
      +
    • + +
    + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        boolean rejectIfNoRule
        Dependency injection for whether to reject if there's no matching rule.
        +
      +
    • +
    + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        protected java.lang.StringcalculateUri(javax.servlet.http.HttpServletRequest request)
        Resolve the URI from javax.servlet.http.HttpServletRequest
        protected voidcompileAndStoreMapping(InterceptedUrl iu)
        protected java.lang.StringdetermineUrl(org.springframework.security.web.FilterInvocation filterInvocation)
        protected java.util.Collection<org.springframework.security.access.ConfigAttribute>findConfigAttributes(java.lang.String url, java.lang.String requestMethod)
        java.util.Collection<org.springframework.security.access.ConfigAttribute>findMatchingAttributes(java.lang.String url)
        For admin/debugging - find all config attributes that apply to the specified URL (doesn't consider request method restrictions).
        java.util.Collection<org.springframework.security.access.ConfigAttribute>getAllConfigAttributes()
        java.util.Collection<org.springframework.security.access.ConfigAttribute>getAttributes(java.lang.Object object)
        java.util.List<InterceptedUrl>getConfigAttributeMap()
        For debugging.
        InterceptedUrlgetInterceptedUrl(java.lang.String url, org.springframework.http.HttpMethod httpMethod)
        protected voidinitialize()
        protected java.lang.StringlowercaseAndStripQuerystring(java.lang.String url)
        voidreset()
        Allows subclasses to be externally reset.
        protected voidresetConfigs()
        protected java.util.List<java.lang.String>split(java.lang.String value)
        protected booleanstopAtFirstMatch()
        protected InterceptedUrlstoreMapping(java.lang.String pattern, org.springframework.http.HttpMethod method, java.util.Collection<org.springframework.security.access.ConfigAttribute> configAttributes)
        protected java.lang.StringstripContextPath(java.lang.String uri, javax.servlet.http.HttpServletRequest request)
        booleansupports(java.lang.Class<?> clazz)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        protected static final java.util.Collection<org.springframework.security.access.ConfigAttribute> ALLOW404

        +

        +
      • +
      + + +
        +
      • +

        protected static final java.util.Collection<org.springframework.security.access.ConfigAttribute> DENY

        +

        +
      • +
      + + +
        +
      • +

        protected static final java.lang.String ERROR404

        +

        +
      • +
      + + +
        +
      • +

        protected org.springframework.security.access.vote.AuthenticatedVoter authenticatedVoter

        +

        +
      • +
      + + + + + +
        +
      • +

        protected boolean initialized

        +

        +
      • +
      + + +
        +
      • +

        protected org.springframework.context.support.MessageSourceAccessor messages

        +

        +
      • +
      + + +
        +
      • +

        protected org.springframework.security.access.vote.RoleVoter roleVoter

        +

        +
      • +
      + + +
        +
      • +

        protected org.springframework.util.AntPathMatcher urlMatcher

        +

        +
      • +
      + + +
        +
      • +

        protected org.springframework.web.util.UrlPathHelper urlPathHelper

        +

        +
      • +
      + +
    • +
    + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        boolean rejectIfNoRule

        +

        Dependency injection for whether to reject if there's no matching rule.

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        AbstractFilterInvocationDefinition()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        @java.lang.Deprecated +protected java.lang.String calculateUri(javax.servlet.http.HttpServletRequest request)

        +

        Resolve the URI from javax.servlet.http.HttpServletRequest

        deprecated:
        Use org.springframework.web.util.UrlPathHelper#getRequestUri(javax.servlet.http.HttpServletRequest request) and stripContextPath instead
        Parameters:
        request - The javax.servlet.http.HttpServletRequest
        Returns:
        The resolved URI string

        +
      • +
      + + + + + +
        +
      • +

        protected java.lang.String determineUrl(org.springframework.security.web.FilterInvocation filterInvocation)

        +

        +
      • +
      + + +
        +
      • +

        protected java.util.Collection<org.springframework.security.access.ConfigAttribute> findConfigAttributes(java.lang.String url, java.lang.String requestMethod)

        +

        +
      • +
      + + +
        +
      • +

        java.util.Collection<org.springframework.security.access.ConfigAttribute> findMatchingAttributes(java.lang.String url)

        +

        For admin/debugging - find all config attributes that apply to the specified URL (doesn't consider request method restrictions).

        Parameters:
        url - the URL
        Returns:
        matching attributes

        +
      • +
      + + +
        +
      • +

        java.util.Collection<org.springframework.security.access.ConfigAttribute> getAllConfigAttributes()

        +

        +
      • +
      + + +
        +
      • +

        java.util.Collection<org.springframework.security.access.ConfigAttribute> getAttributes(java.lang.Object object)

        +

        +
      • +
      + + + + + +
        +
      • +

        InterceptedUrl getInterceptedUrl(java.lang.String url, org.springframework.http.HttpMethod httpMethod)

        +

        +
      • +
      + + +
        +
      • +

        protected void initialize()

        +

        +
      • +
      + + +
        +
      • +

        protected java.lang.String lowercaseAndStripQuerystring(java.lang.String url)

        +

        +
      • +
      + + +
        +
      • +

        void reset()

        +

        Allows subclasses to be externally reset.

        +
      • +
      + + +
        +
      • +

        protected void resetConfigs()

        +

        +
      • +
      + + +
        +
      • +

        protected java.util.List<java.lang.String> split(java.lang.String value)

        +

        +
      • +
      + + +
        +
      • +

        protected boolean stopAtFirstMatch()

        +

        +
      • +
      + + +
        +
      • +

        protected InterceptedUrl storeMapping(java.lang.String pattern, org.springframework.http.HttpMethod method, java.util.Collection<org.springframework.security.access.ConfigAttribute> configAttributes)

        +

        +
      • +
      + + +
        +
      • +

        protected java.lang.String stripContextPath(java.lang.String uri, javax.servlet.http.HttpServletRequest request)

        +

        +
      • +
      + + +
        +
      • +

        boolean supports(java.lang.Class<?> clazz)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/intercept/AnnotationFilterInvocationDefinition.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/intercept/AnnotationFilterInvocationDefinition.html new file mode 100644 index 000000000..f25d163d1 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/intercept/AnnotationFilterInvocationDefinition.html @@ -0,0 +1,835 @@ + + + + + + + + + + + AnnotationFilterInvocationDefinition (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.access.intercept
+ +

[Groovy] Class AnnotationFilterInvocationDefinition

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.web.context.ServletContextAware
    +
    + + + +
    +
    + +
    @groovy.util.logging.Slf4j
    +@groovy.transform.CompileStatic
    +class AnnotationFilterInvocationDefinition
    +extends AbstractFilterInvocationDefinition
    +implements org.springframework.web.context.ServletContextAware
    + +

    A org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource that uses rules defined with + Controller annotations combined with static rules defined in + SecurityConfig.groovy, e.g. for js, images, css or for rules + that cannot be expressed in a controller like '/**'.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+ +
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        protected static java.lang.String SLASH

        +

        +
      • +
      + + +
        +
      • +

        protected grails.web.mapping.UrlMappingsHolder urlMappingsHolder

        +

        +
      • +
      + +
    • +
    + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        grails.core.GrailsApplication application

        +

        Dependency injection for the application.

        +
      • +
      + + +
        +
      • +

        grails.web.UrlConverter grailsUrlConverter

        +

        Dependency injection for the grailsUrlConverter bean.

        +
      • +
      + + +
        +
      • +

        org.grails.web.mime.HttpServletResponseExtension httpServletResponseExtension

        +

        Dependency injection for the httpServletResponseExtension bean.

        +
      • +
      + + +
        +
      • +

        javax.servlet.ServletContext servletContext

        +

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        AnnotationFilterInvocationDefinition()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        protected void compileActionClosures(java.util.Map<java.lang.String, java.util.List<InterceptedUrl>> map)

        +

        +
      • +
      + + +
        +
      • +

        protected void compileActionRoles(java.util.Map<java.lang.String, java.util.List<InterceptedUrl>> map)

        +

        +
      • +
      + + +
        +
      • +

        protected void compileClassClosures(java.util.List<InterceptedUrl> classClosures)

        +

        +
      • +
      + + +
        +
      • +

        protected void compileClassRoles(java.util.List<InterceptedUrl> classRoles)

        +

        +
      • +
      + + +
        +
      • +

        @java.lang.SuppressWarnings(value: unchecked) +protected void compileStaticRules(java.lang.Object staticRules)

        +

        +
      • +
      + + +
        +
      • +

        protected void configureMapping(grails.web.mapping.UrlMappingInfo mapping, org.grails.web.servlet.mvc.GrailsWebRequest grailsRequest, java.util.Map<java.lang.String, java.lang.Object> savedParams)

        +

        +
      • +
      + + +
        +
      • +

        @java.lang.SuppressWarnings(value: unchecked) +protected java.util.Map<java.lang.String, java.lang.Object> copyParams(org.grails.web.servlet.mvc.GrailsWebRequest grailsRequest)

        +

        +
      • +
      + + +
        +
      • +

        protected java.lang.String createControllerUri(java.lang.String controllerName, java.lang.String actionName)

        +

        +
      • +
      + + +
        +
      • +

        @java.lang.Override +protected java.lang.String determineUrl(org.springframework.security.web.FilterInvocation filterInvocation)

        +

        +
      • +
      + + +
        +
      • +

        protected void doStoreMapping(java.lang.String fullPattern, org.springframework.http.HttpMethod method, java.util.Collection<org.springframework.security.access.ConfigAttribute> configAttributes)

        +

        +
      • +
      + + +
        +
      • +

        protected java.util.List<InterceptedUrl> findActionClosures(java.lang.Class<?> clazz)

        +

        +
      • +
      + + +
        +
      • +

        protected java.util.List<InterceptedUrl> findActionRoles(java.lang.Class<?> clazz)

        +

        +
      • +
      + + +
        +
      • +

        protected java.util.Collection<java.lang.reflect.Method> findActions(java.lang.Class<?> clazz)

        +

        +
      • +
      + + +
        +
      • +

        protected java.lang.Class<?> findClosureClass(Secured annotation)

        +

        +
      • +
      + + +
        +
      • +

        protected void findControllerAnnotations(grails.core.GrailsControllerClass controllerClass, java.util.Map<java.lang.String, java.util.List<InterceptedUrl>> actionRoles, java.util.List<InterceptedUrl> classRoles, java.util.Map<java.lang.String, java.util.List<InterceptedUrl>> actionClosures, java.util.List<InterceptedUrl> classClosures)

        +

        +
      • +
      + + +
        +
      • +

        protected void findDomainAnnotations(grails.core.GrailsDomainClass domainClass, java.util.Map<java.lang.String, java.util.List<InterceptedUrl>> actionRoles, java.util.List<InterceptedUrl> classRoles, java.util.Map<java.lang.String, java.util.List<InterceptedUrl>> actionClosures, java.util.List<InterceptedUrl> classClosures)

        +

        +
      • +
      + + +
        +
      • +

        protected java.lang.String findGrailsUrl(grails.web.mapping.UrlMappingInfo mapping)

        +

        +
      • +
      + + +
        +
      • +

        protected java.lang.annotation.Annotation findSecuredAnnotation(java.lang.reflect.AccessibleObject annotatedTarget)

        +

        +
      • +
      + + +
        +
      • +

        protected java.util.List<java.lang.String> generatePatterns(java.lang.String controllerNameOrPattern, java.lang.String actionName, boolean isPattern)

        +

        +
      • +
      + + +
        +
      • +

        protected org.springframework.http.HttpMethod getHttpMethod(java.lang.annotation.Annotation annotation)

        +

        +
      • +
      + + +
        +
      • +

        protected java.util.Collection<java.lang.String> getValue(java.lang.annotation.Annotation annotation)

        +

        +
      • +
      + + +
        +
      • +

        void initialize(java.lang.Object staticRules, grails.web.mapping.UrlMappingsHolder mappingsHolder, grails.core.GrailsClass[] controllerClasses, grails.core.GrailsClass[] domainClasses)

        +

        Called by the plugin to set controller role info.
        + + Reinitialize by calling ctx.objectDefinitionSource.initialize( + ctx.authenticateService.securityConfig.security.annotationStaticRules, + ctx.grailsUrlMappingsHolder, + grailsApplication.controllerClasses)

        Parameters:
        staticRules - data from the controllerAnnotations.staticRules config attribute
        mappingsHolder - mapping holder
        controllerClasses - all controllers
        domainClasses - all domain classes

        +
      • +
      + + +
        +
      • +

        protected groovy.lang.Closure<?> newInstance(java.lang.Class<?> closureClass)

        +

        +
      • +
      + + +
        +
      • +

        protected java.lang.String resolveFullControllerName(grails.core.GrailsControllerClass controllerClass)

        +

        +
      • +
      + + +
        +
      • +

        protected java.lang.String resolveFullControllerName(java.lang.String controllerNameInUrlFormat, java.lang.String namespaceInUrlFormat)

        +

        +
      • +
      + + +
        +
      • +

        protected void storeMapping(java.lang.String controllerNameOrPattern, java.lang.String actionName, java.util.Collection<org.springframework.security.access.ConfigAttribute> configAttributes, boolean isPattern, org.springframework.http.HttpMethod method)

        +

        +
      • +
      + + +
        +
      • +

        protected void storeMapping(java.lang.String controllerName, java.lang.String actionName, java.lang.Class<?> closureClass, org.springframework.http.HttpMethod method)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/intercept/ChannelFilterInvocationSecurityMetadataSourceFactoryBean.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/intercept/ChannelFilterInvocationSecurityMetadataSourceFactoryBean.html new file mode 100644 index 000000000..b4ba82390 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/intercept/ChannelFilterInvocationSecurityMetadataSourceFactoryBean.html @@ -0,0 +1,474 @@ + + + + + + + + + + + ChannelFilterInvocationSecurityMetadataSourceFactoryBean (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.access.intercept
+ +

[Groovy] Class ChannelFilterInvocationSecurityMetadataSourceFactoryBean

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.beans.factory.FactoryBean<org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource>, org.springframework.beans.factory.InitializingBean
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class ChannelFilterInvocationSecurityMetadataSourceFactoryBean
    +extends java.lang.Object
    +implements org.springframework.beans.factory.FactoryBean<org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource>, org.springframework.beans.factory.InitializingBean
    + +

    Factory bean that builds a org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource for channel security.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +

      Field Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        ModifiersNameDescription
        protected static java.util.Collection<java.lang.String> SUPPORTED
        protected org.springframework.security.web.access.intercept.DefaultFilterInvocationSecurityMetadataSource source
        protected org.springframework.util.AntPathMatcher urlMatcher
        +
      +
    • + +
    + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        java.util.List<java.util.Map<java.lang.String, java.lang.String>> definition
        Dependency injection for the definition maps.
        +
      +
    • +
    + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voidafterPropertiesSet()
        protected java.util.LinkedHashMap<org.springframework.security.web.util.matcher.RequestMatcher, java.util.Collection<org.springframework.security.access.ConfigAttribute>>buildMap()
        org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSourcegetObject()
        java.lang.Class<org.springframework.security.web.access.intercept.DefaultFilterInvocationSecurityMetadataSource>getObjectType()
        booleanisSingleton()
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        protected static final java.util.Collection<java.lang.String> SUPPORTED

        +

        +
      • +
      + + +
        +
      • +

        protected org.springframework.security.web.access.intercept.DefaultFilterInvocationSecurityMetadataSource source

        +

        +
      • +
      + + +
        +
      • +

        protected org.springframework.util.AntPathMatcher urlMatcher

        +

        +
      • +
      + +
    • +
    + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        java.util.List<java.util.Map<java.lang.String, java.lang.String>> definition

        +

        Dependency injection for the definition maps. Each map has a single entry, with URL patterns stored under the + 'pattern' key and ANY_CHANNEL, REQUIRES_SECURE_CHANNEL, or REQUIRES_INSECURE_CHANNEL stored under the 'access' key.

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        ChannelFilterInvocationSecurityMetadataSourceFactoryBean()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        void afterPropertiesSet()

        +

        +
      • +
      + + +
        +
      • +

        protected java.util.LinkedHashMap<org.springframework.security.web.util.matcher.RequestMatcher, java.util.Collection<org.springframework.security.access.ConfigAttribute>> buildMap()

        +

        +
      • +
      + + +
        +
      • +

        org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource getObject()

        +

        +
      • +
      + + +
        +
      • +

        java.lang.Class<org.springframework.security.web.access.intercept.DefaultFilterInvocationSecurityMetadataSource> getObjectType()

        +

        +
      • +
      + + +
        +
      • +

        boolean isSingleton()

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/intercept/InterceptUrlMapFilterInvocationDefinition.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/intercept/InterceptUrlMapFilterInvocationDefinition.html new file mode 100644 index 000000000..49172195b --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/intercept/InterceptUrlMapFilterInvocationDefinition.html @@ -0,0 +1,355 @@ + + + + + + + + + + + InterceptUrlMapFilterInvocationDefinition (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.access.intercept
+ +

[Groovy] Class InterceptUrlMapFilterInvocationDefinition

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.util.logging.Slf4j
    +@groovy.transform.CompileStatic
    +class InterceptUrlMapFilterInvocationDefinition
    +extends AbstractFilterInvocationDefinition
    + +

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+ +
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        InterceptUrlMapFilterInvocationDefinition()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        @java.lang.Override +protected void initialize()

        +

        +
      • +
      + + +
        +
      • +

        @java.lang.SuppressWarnings(value: unchecked) +@java.lang.Override +void reset()

        +

        +
      • +
      + + +
        +
      • +

        @java.lang.Override +protected boolean stopAtFirstMatch()

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/intercept/RequestmapFilterInvocationDefinition.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/intercept/RequestmapFilterInvocationDefinition.html new file mode 100644 index 000000000..88fa3a4b6 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/intercept/RequestmapFilterInvocationDefinition.html @@ -0,0 +1,353 @@ + + + + + + + + + + + RequestmapFilterInvocationDefinition (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.access.intercept
+ +

[Groovy] Class RequestmapFilterInvocationDefinition

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.util.logging.Slf4j
    +@groovy.transform.CompileStatic
    +class RequestmapFilterInvocationDefinition
    +extends AbstractFilterInvocationDefinition
    + +

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+ +
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        RequestmapFilterInvocationDefinition()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        @java.lang.Override +protected void initialize()

        +

        +
      • +
      + + +
        +
      • +

        protected java.util.List<InterceptedUrl> loadRequestmaps()

        +

        +
      • +
      + + +
        +
      • +

        @java.lang.Override +void reset()

        +

        Call at startup or when Requestmap instances have been added, removed, or changed.

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/intercept/package-frame.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/intercept/package-frame.html new file mode 100644 index 000000000..ec547564f --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/intercept/package-frame.html @@ -0,0 +1,58 @@ + + + + + grails.plugin.springsecurity.web.access.intercept + + + + + + + + + + +
+ grails.plugin.springsecurity.web.access.intercept +
+ + + + + +
+

Classes

+ +
+ + + + + + + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/intercept/package-summary.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/intercept/package-summary.html new file mode 100644 index 000000000..ca1b129d2 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/intercept/package-summary.html @@ -0,0 +1,179 @@ + + + + + +grails.plugin.springsecurity.web.access.intercept (spring-security-core 6.0.2 API) + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + +
+

Package grails.plugin.springsecurity.web.access.intercept

+
+ + + +
+ + + + +
+ +
+ + + + + + + +
+ + +
+ + + + + +
+ + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/package-frame.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/package-frame.html new file mode 100644 index 000000000..525630633 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/package-frame.html @@ -0,0 +1,58 @@ + + + + + grails.plugin.springsecurity.web.access + + + + + + + + + + +
+ grails.plugin.springsecurity.web.access +
+ + + + + +
+

Classes

+ +
+ + + + + + + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/package-summary.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/package-summary.html new file mode 100644 index 000000000..b5bfcd25e --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/access/package-summary.html @@ -0,0 +1,178 @@ + + + + + +grails.plugin.springsecurity.web.access (spring-security-core 6.0.2 API) + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + +
+

Package grails.plugin.springsecurity.web.access

+
+ + + +
+ + + + +
+ +
+ + + + + + + +
+ + +
+ + + + + +
+ + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/AjaxAwareAuthenticationEntryPoint.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/AjaxAwareAuthenticationEntryPoint.html new file mode 100644 index 000000000..b24bd5f09 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/AjaxAwareAuthenticationEntryPoint.html @@ -0,0 +1,414 @@ + + + + + + + + + + + AjaxAwareAuthenticationEntryPoint (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.authentication
+ +

[Groovy] Class AjaxAwareAuthenticationEntryPoint

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +@groovy.util.logging.Slf4j
    +class AjaxAwareAuthenticationEntryPoint
    +extends org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint
    + +

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +

      Field Summary

      +
        + + + + + + + + + + + + + + +
        Fields 
        ModifiersNameDescription
        protected java.lang.String ajaxLoginFormUrl
        +
      +
    • + +
    + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        org.springframework.security.web.RedirectStrategy redirectStrategy
        Dependency injection for the RedirectStrategy.
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      +
        + + + + + + + + + + +
        Constructors 
        Constructor and description
        + AjaxAwareAuthenticationEntryPoint + (java.lang.String loginFormUrl)
        Parameters:
        loginFormUrl - URL where the login page can be found.
        +
      +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voidcommence(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, org.springframework.security.core.AuthenticationException e)
        protected java.lang.StringdetermineUrlToUseForThisRequest(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res, org.springframework.security.core.AuthenticationException e)
        voidsetAjaxLoginFormUrl(java.lang.String url)
        Dependency injection for the Ajax login form url, e.g.
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPointorg.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint#afterPropertiesSet(), org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint#commence(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.springframework.security.core.AuthenticationException), org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint#setForceHttps(boolean), org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint#getLoginFormUrl(), org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint#setPortMapper(org.springframework.security.web.PortMapper), org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint#setPortResolver(org.springframework.security.web.PortResolver), org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint#setUseForward(boolean), org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint#wait(long), org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint#wait(long, int), org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint#wait(), org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint#equals(java.lang.Object), org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint#toString(), org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint#hashCode(), org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint#getClass(), org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint#notify(), org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        protected java.lang.String ajaxLoginFormUrl

        +

        +
      • +
      + +
    • +
    + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        org.springframework.security.web.RedirectStrategy redirectStrategy

        +

        Dependency injection for the RedirectStrategy.

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        AjaxAwareAuthenticationEntryPoint(java.lang.String loginFormUrl)

        +

        Parameters:
        loginFormUrl - URL where the login page can be found. Should either be relative to the web-app context path + (include a leading /) or an absolute URL.

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        void commence(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, org.springframework.security.core.AuthenticationException e)

        +

        +
      • +
      + + +
        +
      • +

        @java.lang.Override +protected java.lang.String determineUrlToUseForThisRequest(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res, org.springframework.security.core.AuthenticationException e)

        +

        +
      • +
      + + +
        +
      • +

        void setAjaxLoginFormUrl(java.lang.String url)

        +

        Dependency injection for the Ajax login form url, e.g. '/login/authAjax'.

        Parameters:
        url - the url

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/AjaxAwareAuthenticationFailureHandler.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/AjaxAwareAuthenticationFailureHandler.html new file mode 100644 index 000000000..d474b0fec --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/AjaxAwareAuthenticationFailureHandler.html @@ -0,0 +1,392 @@ + + + + + + + + + + + AjaxAwareAuthenticationFailureHandler (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.authentication
+ +

[Groovy] Class AjaxAwareAuthenticationFailureHandler

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.beans.factory.InitializingBean
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class AjaxAwareAuthenticationFailureHandler
    +extends org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler
    +implements org.springframework.beans.factory.InitializingBean
    + +

    Ajax-aware failure handler that detects failed Ajax logins and redirects to the appropriate URL.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        java.lang.String ajaxAuthenticationFailureUrl
        Dependency injection for the Ajax auth fail url.
        +
      +
    • +
    + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voidafterPropertiesSet()
        voidonAuthenticationFailure(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, org.springframework.security.core.AuthenticationException exception)
        voidsetExceptionMappings(java.util.List<java.util.Map<java.lang.String, ?>> mappings)
        Dependency injection for the exception -> url mappings; each map has an 'exception' key and a 'url' key, and + all are merged into one map, where each key is an exception name and each value is the url.
        voidsetExceptionMappingsList(java.util.List<java.util.Map<java.lang.String, ?>> mappings)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandlerorg.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler#setExceptionMappings(java.util.Map), org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler#onAuthenticationFailure(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.springframework.security.core.AuthenticationException), org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler#setRedirectStrategy(org.springframework.security.web.RedirectStrategy), org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler#setUseForward(boolean), org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler#setDefaultFailureUrl(java.lang.String), org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler#setAllowSessionCreation(boolean), org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler#wait(long), org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler#wait(long, int), org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler#wait(), org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler#equals(java.lang.Object), org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler#toString(), org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler#hashCode(), org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler#getClass(), org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler#notify(), org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        java.lang.String ajaxAuthenticationFailureUrl

        +

        Dependency injection for the Ajax auth fail url.

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        AjaxAwareAuthenticationFailureHandler()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        void afterPropertiesSet()

        +

        +
      • +
      + + +
        +
      • +

        @java.lang.Override +void onAuthenticationFailure(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, org.springframework.security.core.AuthenticationException exception)

        +

        +
      • +
      + + +
        +
      • +

        void setExceptionMappings(java.util.List<java.util.Map<java.lang.String, ?>> mappings)

        +

        Dependency injection for the exception -> url mappings; each map has an 'exception' key and a 'url' key, and + all are merged into one map, where each key is an exception name and each value is the url.

        Parameters:
        mappings - list of single-entry maps

        +
      • +
      + + +
        +
      • +

        void setExceptionMappingsList(java.util.List<java.util.Map<java.lang.String, ?>> mappings)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/AjaxAwareAuthenticationSuccessHandler.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/AjaxAwareAuthenticationSuccessHandler.html new file mode 100644 index 000000000..bae32d83c --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/AjaxAwareAuthenticationSuccessHandler.html @@ -0,0 +1,399 @@ + + + + + + + + + + + AjaxAwareAuthenticationSuccessHandler (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.authentication
+ +

[Groovy] Class AjaxAwareAuthenticationSuccessHandler

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class AjaxAwareAuthenticationSuccessHandler
    +extends org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler
    + +

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +

      Field Summary

      +
        + + + + + + + + + + + + + + +
        Fields 
        ModifiersNameDescription
        protected org.springframework.security.web.savedrequest.RequestCache requestCache
        +
      +
    • + +
    + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        java.lang.String ajaxSuccessUrl
        Dependency injection for the Ajax success url, e.g.
        +
      +
    • +
    + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voidonAuthenticationSuccess(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, org.springframework.security.core.Authentication authentication)
        voidsetRequestCache(org.springframework.security.web.savedrequest.RequestCache cache)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandlerorg.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler#setRequestCache(org.springframework.security.web.savedrequest.RequestCache), org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler#onAuthenticationSuccess(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.springframework.security.core.Authentication), org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler#setRedirectStrategy(org.springframework.security.web.RedirectStrategy), org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler#setDefaultTargetUrl(java.lang.String), org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler#setUseReferer(boolean), org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler#setAlwaysUseDefaultTargetUrl(boolean), org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler#setTargetUrlParameter(java.lang.String), org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler#wait(long), org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler#wait(long, int), org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler#wait(), org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler#equals(java.lang.Object), org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler#toString(), org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler#hashCode(), org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler#getClass(), org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler#notify(), org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler#notifyAll(), org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler#onAuthenticationSuccess(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, javax.servlet.FilterChain, org.springframework.security.core.Authentication)
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        protected org.springframework.security.web.savedrequest.RequestCache requestCache

        +

        +
      • +
      + +
    • +
    + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        java.lang.String ajaxSuccessUrl

        +

        Dependency injection for the Ajax success url, e.g. '/login/ajaxSuccess'.

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        AjaxAwareAuthenticationSuccessHandler()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        @java.lang.Override +void onAuthenticationSuccess(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, org.springframework.security.core.Authentication authentication)

        +

        +
      • +
      + + +
        +
      • +

        @java.lang.Override +void setRequestCache(org.springframework.security.web.savedrequest.RequestCache cache)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/FilterProcessUrlRequestMatcher.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/FilterProcessUrlRequestMatcher.html new file mode 100644 index 000000000..e622ce662 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/FilterProcessUrlRequestMatcher.html @@ -0,0 +1,348 @@ + + + + + + + + + + + FilterProcessUrlRequestMatcher (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.authentication
+ +

[Groovy] Class FilterProcessUrlRequestMatcher

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.web.util.matcher.RequestMatcher
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class FilterProcessUrlRequestMatcher
    +extends java.lang.Object
    +implements org.springframework.security.web.util.matcher.RequestMatcher
    + +

    Based on the class of the same name which is a private static inner class in + org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.

    Authors:
    Ben Alex
    Luke Taylor
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        java.lang.String filterProcessesUrl
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      + +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        booleanmatches(javax.servlet.http.HttpServletRequest request)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        final java.lang.String filterProcessesUrl

        +

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        FilterProcessUrlRequestMatcher(java.lang.String filterProcessesUrl)

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        boolean matches(javax.servlet.http.HttpServletRequest request)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/GrailsUsernamePasswordAuthenticationFilter.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/GrailsUsernamePasswordAuthenticationFilter.html new file mode 100644 index 000000000..68a198a6f --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/GrailsUsernamePasswordAuthenticationFilter.html @@ -0,0 +1,379 @@ + + + + + + + + + + + GrailsUsernamePasswordAuthenticationFilter (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.authentication
+ +

[Groovy] Class GrailsUsernamePasswordAuthenticationFilter

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class GrailsUsernamePasswordAuthenticationFilter
    +extends org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter
    + +

    Extends the default org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter to store the + last attempted login username in the session under the 'SPRING_SECURITY_LAST_USERNAME' + key if storeLastUsername is true.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +
        + + + + + + + + + + + +
        Inherited fields 
        Fields inherited from classFields
        class org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilterSPRING_SECURITY_FORM_USERNAME_KEY, SPRING_SECURITY_FORM_PASSWORD_KEY
        +
      +
    • + +
    + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        java.lang.Boolean storeLastUsername
        Whether to store the last attempted username in the session.
        +
      +
    • +
    + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voidafterPropertiesSet()
        org.springframework.security.core.AuthenticationattemptAuthentication(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilterorg.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#setPasswordParameter(java.lang.String), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#setPostOnly(boolean), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#getUsernameParameter(), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#getPasswordParameter(), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#attemptAuthentication(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#setUsernameParameter(java.lang.String), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#setFilterProcessesUrl(java.lang.String), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#setRequiresAuthenticationRequestMatcher(org.springframework.security.web.util.matcher.RequestMatcher), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#getRememberMeServices(), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#setRememberMeServices(org.springframework.security.web.authentication.RememberMeServices), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#setContinueChainBeforeSuccessfulAuthentication(boolean), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#setAuthenticationDetailsSource(org.springframework.security.authentication.AuthenticationDetailsSource), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#afterPropertiesSet(), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#setMessageSource(org.springframework.context.MessageSource), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#setSecurityContextHolderStrategy(org.springframework.security.core.context.SecurityContextHolderStrategy), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#setAuthenticationManager(org.springframework.security.authentication.AuthenticationManager), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#setAllowSessionCreation(boolean), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#setSessionAuthenticationStrategy(org.springframework.security.web.authentication.session.SessionAuthenticationStrategy), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#setAuthenticationSuccessHandler(org.springframework.security.web.authentication.AuthenticationSuccessHandler), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#setAuthenticationFailureHandler(org.springframework.security.web.authentication.AuthenticationFailureHandler), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#setSecurityContextRepository(org.springframework.security.web.context.SecurityContextRepository), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#getEnvironment(), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#setEnvironment(org.springframework.core.env.Environment), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#setServletContext(javax.servlet.ServletContext), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#setBeanName(java.lang.String), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#getFilterConfig(), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#init(javax.servlet.FilterConfig), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#destroy(), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#wait(long), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#wait(long, int), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#wait(), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#equals(java.lang.Object), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#toString(), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#hashCode(), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#getClass(), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#notify(), org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        java.lang.Boolean storeLastUsername

        +

        Whether to store the last attempted username in the session.

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        GrailsUsernamePasswordAuthenticationFilter()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        @java.lang.Override +void afterPropertiesSet()

        +

        +
      • +
      + + +
        +
      • +

        @java.lang.Override +org.springframework.security.core.Authentication attemptAuthentication(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/NullLogoutHandlerRememberMeServices.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/NullLogoutHandlerRememberMeServices.html new file mode 100644 index 000000000..55416168e --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/NullLogoutHandlerRememberMeServices.html @@ -0,0 +1,308 @@ + + + + + + + + + + + NullLogoutHandlerRememberMeServices (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.authentication
+ +

[Groovy] Class NullLogoutHandlerRememberMeServices

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.web.authentication.logout.LogoutHandler
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class NullLogoutHandlerRememberMeServices
    +extends org.springframework.security.web.authentication.NullRememberMeServices
    +implements org.springframework.security.web.authentication.logout.LogoutHandler
    + +

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voidlogout(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res, org.springframework.security.core.Authentication a)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class org.springframework.security.web.authentication.NullRememberMeServicesorg.springframework.security.web.authentication.NullRememberMeServices#autoLogin(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse), org.springframework.security.web.authentication.NullRememberMeServices#loginSuccess(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.springframework.security.core.Authentication), org.springframework.security.web.authentication.NullRememberMeServices#loginFail(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse), org.springframework.security.web.authentication.NullRememberMeServices#wait(long), org.springframework.security.web.authentication.NullRememberMeServices#wait(long, int), org.springframework.security.web.authentication.NullRememberMeServices#wait(), org.springframework.security.web.authentication.NullRememberMeServices#equals(java.lang.Object), org.springframework.security.web.authentication.NullRememberMeServices#toString(), org.springframework.security.web.authentication.NullRememberMeServices#hashCode(), org.springframework.security.web.authentication.NullRememberMeServices#getClass(), org.springframework.security.web.authentication.NullRememberMeServices#notify(), org.springframework.security.web.authentication.NullRememberMeServices#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        NullLogoutHandlerRememberMeServices()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        void logout(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res, org.springframework.security.core.Authentication a)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/logout/MutableLogoutFilter.DummyLogoutHandler.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/logout/MutableLogoutFilter.DummyLogoutHandler.html new file mode 100644 index 000000000..a795723bc --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/logout/MutableLogoutFilter.DummyLogoutHandler.html @@ -0,0 +1,308 @@ + + + + + + + + + + + MutableLogoutFilter.DummyLogoutHandler (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.authentication.logout
+ +

[Groovy] Class MutableLogoutFilter.DummyLogoutHandler

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.web.authentication.logout.LogoutHandler
    +
    + + + +
    +
    + +
    protected static class MutableLogoutFilter.DummyLogoutHandler
    +extends java.lang.Object
    +implements org.springframework.security.web.authentication.logout.LogoutHandler
    + +

    Null logout handler that's used to provide a non-empty list of handlers to the base class. + The real handlers will be after construction.

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voidlogout(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res, org.springframework.security.core.Authentication a)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        MutableLogoutFilter.DummyLogoutHandler()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        void logout(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res, org.springframework.security.core.Authentication a)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/logout/MutableLogoutFilter.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/logout/MutableLogoutFilter.html new file mode 100644 index 000000000..fc01acc4d --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/logout/MutableLogoutFilter.html @@ -0,0 +1,409 @@ + + + + + + + + + + + MutableLogoutFilter (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.authentication.logout
+ +

[Groovy] Class MutableLogoutFilter

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.util.logging.Slf4j
    +@groovy.transform.CompileStatic
    +class MutableLogoutFilter
    +extends org.springframework.security.web.authentication.logout.LogoutFilter
    + +

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + +
      +
    • +

      Nested Class Summary

      +
        + + + + + + + + + + + + + + +
        Nested classes 
        ModifiersNameDescription
        protected static class MutableLogoutFilter.DummyLogoutHandlerNull logout handler that's used to provide a non-empty list of handlers to the base class. +
        +
      +
    • +
    + + + + + + +
      +
    • +

      Field Summary

      +
        + + + + + + + + + + + + + + +
        Fields 
        ModifiersNameDescription
        protected org.springframework.security.web.authentication.logout.LogoutSuccessHandler logoutSuccessHandler
        +
      +
    • + +
    + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        java.util.List<org.springframework.security.web.authentication.logout.LogoutHandler> handlers
        Dependency injection for the logout handlers.
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      +
        + + + + + + + + + + +
        Constructors 
        Constructor and description
        + MutableLogoutFilter + (org.springframework.security.web.authentication.logout.LogoutSuccessHandler successHandler)
        Constructor.
        +
      +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voiddoFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res, javax.servlet.FilterChain chain)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class org.springframework.security.web.authentication.logout.LogoutFilterorg.springframework.security.web.authentication.logout.LogoutFilter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain), org.springframework.security.web.authentication.logout.LogoutFilter#setFilterProcessesUrl(java.lang.String), org.springframework.security.web.authentication.logout.LogoutFilter#setSecurityContextHolderStrategy(org.springframework.security.core.context.SecurityContextHolderStrategy), org.springframework.security.web.authentication.logout.LogoutFilter#setLogoutRequestMatcher(org.springframework.security.web.util.matcher.RequestMatcher), org.springframework.security.web.authentication.logout.LogoutFilter#getEnvironment(), org.springframework.security.web.authentication.logout.LogoutFilter#setEnvironment(org.springframework.core.env.Environment), org.springframework.security.web.authentication.logout.LogoutFilter#afterPropertiesSet(), org.springframework.security.web.authentication.logout.LogoutFilter#setServletContext(javax.servlet.ServletContext), org.springframework.security.web.authentication.logout.LogoutFilter#setBeanName(java.lang.String), org.springframework.security.web.authentication.logout.LogoutFilter#getFilterConfig(), org.springframework.security.web.authentication.logout.LogoutFilter#init(javax.servlet.FilterConfig), org.springframework.security.web.authentication.logout.LogoutFilter#destroy(), org.springframework.security.web.authentication.logout.LogoutFilter#wait(long), org.springframework.security.web.authentication.logout.LogoutFilter#wait(long, int), org.springframework.security.web.authentication.logout.LogoutFilter#wait(), org.springframework.security.web.authentication.logout.LogoutFilter#equals(java.lang.Object), org.springframework.security.web.authentication.logout.LogoutFilter#toString(), org.springframework.security.web.authentication.logout.LogoutFilter#hashCode(), org.springframework.security.web.authentication.logout.LogoutFilter#getClass(), org.springframework.security.web.authentication.logout.LogoutFilter#notify(), org.springframework.security.web.authentication.logout.LogoutFilter#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        protected final org.springframework.security.web.authentication.logout.LogoutSuccessHandler logoutSuccessHandler

        +

        +
      • +
      + +
    • +
    + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        java.util.List<org.springframework.security.web.authentication.logout.LogoutHandler> handlers

        +

        Dependency injection for the logout handlers.

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        MutableLogoutFilter(org.springframework.security.web.authentication.logout.LogoutSuccessHandler successHandler)

        +

        Constructor.

        Parameters:
        successHandler - the logout success handler

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        @java.lang.Override +void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res, javax.servlet.FilterChain chain)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/logout/package-frame.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/logout/package-frame.html new file mode 100644 index 000000000..96068c8fa --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/logout/package-frame.html @@ -0,0 +1,58 @@ + + + + + grails.plugin.springsecurity.web.authentication.logout + + + + + + + + + + +
+ grails.plugin.springsecurity.web.authentication.logout +
+ + + + + +
+

Classes

+ +
+ + + + + + + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/logout/package-summary.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/logout/package-summary.html new file mode 100644 index 000000000..c0c7621a3 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/logout/package-summary.html @@ -0,0 +1,153 @@ + + + + + +grails.plugin.springsecurity.web.authentication.logout (spring-security-core 6.0.2 API) + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + +
+

Package grails.plugin.springsecurity.web.authentication.logout

+
+ + + +
+ + + + +
+ +
+ + + + + + + +
+ + +
+ + + + + +
+ + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/package-frame.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/package-frame.html new file mode 100644 index 000000000..433b44dfd --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/package-frame.html @@ -0,0 +1,58 @@ + + + + + grails.plugin.springsecurity.web.authentication + + + + + + + + + + +
+ grails.plugin.springsecurity.web.authentication +
+ + + + + +
+

Classes

+ +
+ + + + + + + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/package-summary.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/package-summary.html new file mode 100644 index 000000000..a5349a4f5 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/package-summary.html @@ -0,0 +1,187 @@ + + + + + +grails.plugin.springsecurity.web.authentication (spring-security-core 6.0.2 API) + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + +
+

Package grails.plugin.springsecurity.web.authentication

+
+ + + +
+ + + + +
+ +
+ + + + + + + +
+ + +
+ + + + + +
+ + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/preauth/x509/ClosureX509PrincipalExtractor.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/preauth/x509/ClosureX509PrincipalExtractor.html new file mode 100644 index 000000000..c3b16c0df --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/preauth/x509/ClosureX509PrincipalExtractor.html @@ -0,0 +1,405 @@ + + + + + + + + + + + ClosureX509PrincipalExtractor (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.authentication.preauth.x509
+ +

[Groovy] Class ClosureX509PrincipalExtractor

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.web.authentication.preauth.x509.X509PrincipalExtractor, org.springframework.context.MessageSourceAware
    +
    + + + +
    +
    + +
    @groovy.util.logging.Slf4j
    +@groovy.transform.CompileStatic
    +class ClosureX509PrincipalExtractor
    +extends java.lang.Object
    +implements org.springframework.security.web.authentication.preauth.x509.X509PrincipalExtractor, org.springframework.context.MessageSourceAware
    + +

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +

      Field Summary

      +
        + + + + + + + + + + + + + + +
        Fields 
        ModifiersNameDescription
        protected org.springframework.context.support.MessageSourceAccessor messages
        +
      +
    • + +
    + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        groovy.lang.Closure<?> closure
        Dependency injection for the closure to use to extract the username.
        +
      +
    • +
    + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        java.lang.ObjectextractPrincipal(java.security.cert.X509Certificate clientCert)
        voidsetMessageSource(org.springframework.context.MessageSource messageSource)
        Dependency injection for the message source.
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        protected org.springframework.context.support.MessageSourceAccessor messages

        +

        +
      • +
      + +
    • +
    + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        groovy.lang.Closure<?> closure

        +

        Dependency injection for the closure to use to extract the username.

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        ClosureX509PrincipalExtractor()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        java.lang.Object extractPrincipal(java.security.cert.X509Certificate clientCert)

        +

        +
      • +
      + + +
        +
      • +

        @java.lang.Override +void setMessageSource(org.springframework.context.MessageSource messageSource)

        +

        Dependency injection for the message source.

        Parameters:
        messageSource - the message source

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/preauth/x509/NullAuthenticationFailureHandler.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/preauth/x509/NullAuthenticationFailureHandler.html new file mode 100644 index 000000000..ace2a511c --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/preauth/x509/NullAuthenticationFailureHandler.html @@ -0,0 +1,308 @@ + + + + + + + + + + + NullAuthenticationFailureHandler (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.authentication.preauth.x509
+ +

[Groovy] Class NullAuthenticationFailureHandler

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.web.authentication.AuthenticationFailureHandler
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class NullAuthenticationFailureHandler
    +extends java.lang.Object
    +implements org.springframework.security.web.authentication.AuthenticationFailureHandler
    + +

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voidonAuthenticationFailure(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res, org.springframework.security.core.AuthenticationException e)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        NullAuthenticationFailureHandler()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        void onAuthenticationFailure(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res, org.springframework.security.core.AuthenticationException e)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/preauth/x509/NullAuthenticationSuccessHandler.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/preauth/x509/NullAuthenticationSuccessHandler.html new file mode 100644 index 000000000..5ee833f19 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/preauth/x509/NullAuthenticationSuccessHandler.html @@ -0,0 +1,308 @@ + + + + + + + + + + + NullAuthenticationSuccessHandler (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.authentication.preauth.x509
+ +

[Groovy] Class NullAuthenticationSuccessHandler

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.web.authentication.AuthenticationSuccessHandler
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class NullAuthenticationSuccessHandler
    +extends java.lang.Object
    +implements org.springframework.security.web.authentication.AuthenticationSuccessHandler
    + +

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voidonAuthenticationSuccess(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res, org.springframework.security.core.Authentication a)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        NullAuthenticationSuccessHandler()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        void onAuthenticationSuccess(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res, org.springframework.security.core.Authentication a)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/preauth/x509/package-frame.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/preauth/x509/package-frame.html new file mode 100644 index 000000000..3832eee21 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/preauth/x509/package-frame.html @@ -0,0 +1,58 @@ + + + + + grails.plugin.springsecurity.web.authentication.preauth.x509 + + + + + + + + + + +
+ grails.plugin.springsecurity.web.authentication.preauth.x509 +
+ + + + + +
+

Classes

+ +
+ + + + + + + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/preauth/x509/package-summary.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/preauth/x509/package-summary.html new file mode 100644 index 000000000..1dfd7efac --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/preauth/x509/package-summary.html @@ -0,0 +1,160 @@ + + + + + +grails.plugin.springsecurity.web.authentication.preauth.x509 (spring-security-core 6.0.2 API) + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + +
+

Package grails.plugin.springsecurity.web.authentication.preauth.x509

+
+ + + +
+ + + + +
+ +
+ + + + + + + +
+ + +
+ + + + + +
+ + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/rememberme/GormPersistentTokenRepository.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/rememberme/GormPersistentTokenRepository.html new file mode 100644 index 000000000..c5e9b2abd --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/rememberme/GormPersistentTokenRepository.html @@ -0,0 +1,403 @@ + + + + + + + + + + + GormPersistentTokenRepository (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.authentication.rememberme
+ +

[Groovy] Class GormPersistentTokenRepository

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.web.authentication.rememberme.PersistentTokenRepository, grails.core.support.GrailsApplicationAware
    +
    + + + +
    +
    + +
    @groovy.util.logging.Slf4j
    +class GormPersistentTokenRepository
    +extends java.lang.Object
    +implements org.springframework.security.web.authentication.rememberme.PersistentTokenRepository, grails.core.support.GrailsApplicationAware
    + +

    GORM-based PersistentTokenRepository implementation, based on org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        grails.core.GrailsApplication grailsApplication
        Dependency injection for grailsApplication.
        +
      +
    • +
    + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voidcreateNewToken(org.springframework.security.web.authentication.rememberme.PersistentRememberMeToken token)
        org.springframework.security.web.authentication.rememberme.PersistentRememberMeTokengetTokenForSeries(java.lang.String seriesId)
        protected java.lang.ClasslookupDomainClass()
        voidremoveUserTokens(java.lang.String username)
        voidupdateToken(java.lang.String series, java.lang.String tokenValue, java.util.Date lastUsed)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        grails.core.GrailsApplication grailsApplication

        +

        Dependency injection for grailsApplication.

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        GormPersistentTokenRepository()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        void createNewToken(org.springframework.security.web.authentication.rememberme.PersistentRememberMeToken token)

        +

        +
      • +
      + + +
        +
      • +

        org.springframework.security.web.authentication.rememberme.PersistentRememberMeToken getTokenForSeries(java.lang.String seriesId)

        +

        +
      • +
      + + +
        +
      • +

        protected java.lang.Class lookupDomainClass()

        +

        +
      • +
      + + +
        +
      • +

        void removeUserTokens(java.lang.String username)

        +

        +
      • +
      + + +
        +
      • +

        void updateToken(java.lang.String series, java.lang.String tokenValue, java.util.Date lastUsed)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/rememberme/package-frame.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/rememberme/package-frame.html new file mode 100644 index 000000000..b5ccfacfc --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/rememberme/package-frame.html @@ -0,0 +1,58 @@ + + + + + grails.plugin.springsecurity.web.authentication.rememberme + + + + + + + + + + +
+ grails.plugin.springsecurity.web.authentication.rememberme +
+ + + + + +
+

Classes

+ +
+ + + + + + + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/rememberme/package-summary.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/rememberme/package-summary.html new file mode 100644 index 000000000..fa4093e15 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/rememberme/package-summary.html @@ -0,0 +1,144 @@ + + + + + +grails.plugin.springsecurity.web.authentication.rememberme (spring-security-core 6.0.2 API) + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + +
+

Package grails.plugin.springsecurity.web.authentication.rememberme

+
+ + + +
+ + + + +
+
    +
  • + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    + + GormPersistentTokenRepository + + GORM-based PersistentTokenRepository implementation, based on org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl.
    +
  • +
+
+ + + + + + + +
+ + +
+ + + + + +
+ + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/switchuser/NullSwitchUserAuthorityChanger.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/switchuser/NullSwitchUserAuthorityChanger.html new file mode 100644 index 000000000..27be165b4 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/switchuser/NullSwitchUserAuthorityChanger.html @@ -0,0 +1,308 @@ + + + + + + + + + + + NullSwitchUserAuthorityChanger (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.authentication.switchuser
+ +

[Groovy] Class NullSwitchUserAuthorityChanger

+
+
+ +
+
    +
  • + +
    +
    All Implemented Interfaces and Traits:
    +
    org.springframework.security.web.authentication.switchuser.SwitchUserAuthorityChanger
    +
    + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class NullSwitchUserAuthorityChanger
    +extends java.lang.Object
    +implements org.springframework.security.web.authentication.switchuser.SwitchUserAuthorityChanger
    + +

    No-op implementation.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        java.util.Collection<? extends org.springframework.security.core.GrantedAuthority>modifyGrantedAuthorities(org.springframework.security.core.userdetails.UserDetails targetUser, org.springframework.security.core.Authentication currentAuthentication, java.util.Collection<? extends org.springframework.security.core.GrantedAuthority> authoritiesToBeGranted)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        NullSwitchUserAuthorityChanger()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        java.util.Collection<? extends org.springframework.security.core.GrantedAuthority> modifyGrantedAuthorities(org.springframework.security.core.userdetails.UserDetails targetUser, org.springframework.security.core.Authentication currentAuthentication, java.util.Collection<? extends org.springframework.security.core.GrantedAuthority> authoritiesToBeGranted)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/switchuser/package-frame.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/switchuser/package-frame.html new file mode 100644 index 000000000..219946b1f --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/switchuser/package-frame.html @@ -0,0 +1,58 @@ + + + + + grails.plugin.springsecurity.web.authentication.switchuser + + + + + + + + + + +
+ grails.plugin.springsecurity.web.authentication.switchuser +
+ + + + + +
+

Classes

+ +
+ + + + + + + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/switchuser/package-summary.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/switchuser/package-summary.html new file mode 100644 index 000000000..65d203cf2 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/authentication/switchuser/package-summary.html @@ -0,0 +1,144 @@ + + + + + +grails.plugin.springsecurity.web.authentication.switchuser (spring-security-core 6.0.2 API) + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + +
+

Package grails.plugin.springsecurity.web.authentication.switchuser

+
+ + + +
+ + + + +
+ +
+ + + + + + + +
+ + +
+ + + + + +
+ + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/DebugFilter.1.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/DebugFilter.1.html new file mode 100644 index 000000000..5edaa2bd7 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/DebugFilter.1.html @@ -0,0 +1,335 @@ + + + + + + + + + + + DebugFilter.1 (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.filter
+ +

[Groovy] Class DebugFilter.1

+
+
+ +
+
    +
  • + + + +
    +
    + +
    class DebugFilter.1
    +extends javax.servlet.http.HttpServletRequestWrapper
    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +
        + + + + + + + + + + + +
        Inherited fields 
        Fields inherited from classFields
        class javax.servlet.http.HttpServletRequestWrapperBASIC_AUTH, FORM_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH
        +
      +
    • + +
    + + + + + + + + + + +
      +
    • +

      Constructor Summary

      +
        + + + + + + + + + + +
        Constructors 
        Constructor and description
        + DebugFilter.1 + ()
        +
      +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        javax.servlet.http.HttpSessiongetSession()
        javax.servlet.http.HttpSessiongetSession(boolean create)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class javax.servlet.http.HttpServletRequestWrapperjavax.servlet.http.HttpServletRequestWrapper#getHeader(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getHeaders(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getQueryString(), javax.servlet.http.HttpServletRequestWrapper#upgrade(java.lang.Class), javax.servlet.http.HttpServletRequestWrapper#getCookies(), javax.servlet.http.HttpServletRequestWrapper#getUserPrincipal(), javax.servlet.http.HttpServletRequestWrapper#login(java.lang.String, java.lang.String), javax.servlet.http.HttpServletRequestWrapper#logout(), javax.servlet.http.HttpServletRequestWrapper#authenticate(javax.servlet.http.HttpServletResponse), javax.servlet.http.HttpServletRequestWrapper#getRequestURI(), javax.servlet.http.HttpServletRequestWrapper#getAuthType(), javax.servlet.http.HttpServletRequestWrapper#getSession(), javax.servlet.http.HttpServletRequestWrapper#getSession(boolean), javax.servlet.http.HttpServletRequestWrapper#getParts(), javax.servlet.http.HttpServletRequestWrapper#getContextPath(), javax.servlet.http.HttpServletRequestWrapper#getDateHeader(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getHeaderNames(), javax.servlet.http.HttpServletRequestWrapper#getIntHeader(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getHttpServletMapping(), javax.servlet.http.HttpServletRequestWrapper#getPathInfo(), javax.servlet.http.HttpServletRequestWrapper#getPathTranslated(), javax.servlet.http.HttpServletRequestWrapper#newPushBuilder(), javax.servlet.http.HttpServletRequestWrapper#getRemoteUser(), javax.servlet.http.HttpServletRequestWrapper#isUserInRole(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getRequestedSessionId(), javax.servlet.http.HttpServletRequestWrapper#getRequestURL(), javax.servlet.http.HttpServletRequestWrapper#getServletPath(), javax.servlet.http.HttpServletRequestWrapper#changeSessionId(), javax.servlet.http.HttpServletRequestWrapper#isRequestedSessionIdValid(), javax.servlet.http.HttpServletRequestWrapper#isRequestedSessionIdFromCookie(), javax.servlet.http.HttpServletRequestWrapper#isRequestedSessionIdFromURL(), javax.servlet.http.HttpServletRequestWrapper#isRequestedSessionIdFromUrl(), javax.servlet.http.HttpServletRequestWrapper#getPart(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getTrailerFields(), javax.servlet.http.HttpServletRequestWrapper#isTrailerFieldsReady(), javax.servlet.http.HttpServletRequestWrapper#getMethod(), javax.servlet.http.HttpServletRequestWrapper#getContentLength(), javax.servlet.http.HttpServletRequestWrapper#setAttribute(java.lang.String, java.lang.Object), javax.servlet.http.HttpServletRequestWrapper#getAttribute(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getContentLengthLong(), javax.servlet.http.HttpServletRequestWrapper#getContentType(), javax.servlet.http.HttpServletRequestWrapper#getLocalName(), javax.servlet.http.HttpServletRequestWrapper#getRemotePort(), javax.servlet.http.HttpServletRequestWrapper#isSecure(), javax.servlet.http.HttpServletRequestWrapper#removeAttribute(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getParameter(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getReader(), javax.servlet.http.HttpServletRequestWrapper#isWrapperFor(java.lang.Class), javax.servlet.http.HttpServletRequestWrapper#isWrapperFor(javax.servlet.ServletRequest), javax.servlet.http.HttpServletRequestWrapper#getRequest(), javax.servlet.http.HttpServletRequestWrapper#getAttributeNames(), javax.servlet.http.HttpServletRequestWrapper#getServletContext(), javax.servlet.http.HttpServletRequestWrapper#getCharacterEncoding(), javax.servlet.http.HttpServletRequestWrapper#setCharacterEncoding(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getParameterNames(), javax.servlet.http.HttpServletRequestWrapper#getParameterValues(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getParameterMap(), javax.servlet.http.HttpServletRequestWrapper#getServerName(), javax.servlet.http.HttpServletRequestWrapper#getServerPort(), javax.servlet.http.HttpServletRequestWrapper#getRemoteAddr(), javax.servlet.http.HttpServletRequestWrapper#getRemoteHost(), javax.servlet.http.HttpServletRequestWrapper#getLocales(), javax.servlet.http.HttpServletRequestWrapper#getRequestDispatcher(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getRealPath(java.lang.String), javax.servlet.http.HttpServletRequestWrapper#getLocalAddr(), javax.servlet.http.HttpServletRequestWrapper#startAsync(javax.servlet.ServletRequest, javax.servlet.ServletResponse), javax.servlet.http.HttpServletRequestWrapper#startAsync(), javax.servlet.http.HttpServletRequestWrapper#isAsyncStarted(), javax.servlet.http.HttpServletRequestWrapper#isAsyncSupported(), javax.servlet.http.HttpServletRequestWrapper#getAsyncContext(), javax.servlet.http.HttpServletRequestWrapper#getDispatcherType(), javax.servlet.http.HttpServletRequestWrapper#setRequest(javax.servlet.ServletRequest), javax.servlet.http.HttpServletRequestWrapper#getLocale(), javax.servlet.http.HttpServletRequestWrapper#getLocalPort(), javax.servlet.http.HttpServletRequestWrapper#getProtocol(), javax.servlet.http.HttpServletRequestWrapper#getScheme(), javax.servlet.http.HttpServletRequestWrapper#getInputStream(), javax.servlet.http.HttpServletRequestWrapper#wait(long), javax.servlet.http.HttpServletRequestWrapper#wait(long, int), javax.servlet.http.HttpServletRequestWrapper#wait(), javax.servlet.http.HttpServletRequestWrapper#equals(java.lang.Object), javax.servlet.http.HttpServletRequestWrapper#toString(), javax.servlet.http.HttpServletRequestWrapper#hashCode(), javax.servlet.http.HttpServletRequestWrapper#getClass(), javax.servlet.http.HttpServletRequestWrapper#notify(), javax.servlet.http.HttpServletRequestWrapper#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        DebugFilter.1()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        @java.lang.Override +javax.servlet.http.HttpSession getSession()

        +

        +
      • +
      + + +
        +
      • +

        @java.lang.Override +javax.servlet.http.HttpSession getSession(boolean create)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/DebugFilter.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/DebugFilter.html new file mode 100644 index 000000000..29e04efdb --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/DebugFilter.html @@ -0,0 +1,491 @@ + + + + + + + + + + + DebugFilter (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.filter
+ +

[Groovy] Class DebugFilter

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.util.logging.Slf4j
    +@groovy.transform.TypeChecked
    +class DebugFilter
    +extends org.springframework.web.filter.GenericFilterBean
    + +

    Based on the package-scope org.springframework.security.config.debug.DebugFilter.

    Authors:
    Luke Taylor
    Rob Winch
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + +
      +
    • +

      Nested Class Summary

      +
        + + + + + + + + + + + + + + +
        Nested classes 
        ModifiersNameDescription
        class DebugFilter.1
        +
      +
    • +
    + + + + + + + + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        org.springframework.security.web.FilterChainProxy filterChainProxy
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      +
        + + + + + + + + + + +
        Constructors 
        Constructor and description
        + DebugFilter + (org.springframework.security.web.FilterChainProxy fcp)
        +
      +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        protected voiddebugLog(boolean dumpStack, java.lang.String message, java.lang.Object[] args)
        voiddoFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res, javax.servlet.FilterChain filterChain)
        protected java.lang.StringformatFilters(java.util.List<javax.servlet.Filter> filters)
        protected java.util.List<javax.servlet.Filter>getFilters(javax.servlet.http.HttpServletRequest request)
        protected voidinvokeWithWrappedRequest(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.FilterChain filterChain)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class org.springframework.web.filter.GenericFilterBeanorg.springframework.web.filter.GenericFilterBean#getEnvironment(), org.springframework.web.filter.GenericFilterBean#setEnvironment(org.springframework.core.env.Environment), org.springframework.web.filter.GenericFilterBean#afterPropertiesSet(), org.springframework.web.filter.GenericFilterBean#setServletContext(javax.servlet.ServletContext), org.springframework.web.filter.GenericFilterBean#setBeanName(java.lang.String), org.springframework.web.filter.GenericFilterBean#getFilterConfig(), org.springframework.web.filter.GenericFilterBean#init(javax.servlet.FilterConfig), org.springframework.web.filter.GenericFilterBean#destroy(), org.springframework.web.filter.GenericFilterBean#wait(long), org.springframework.web.filter.GenericFilterBean#wait(long, int), org.springframework.web.filter.GenericFilterBean#wait(), org.springframework.web.filter.GenericFilterBean#equals(java.lang.Object), org.springframework.web.filter.GenericFilterBean#toString(), org.springframework.web.filter.GenericFilterBean#hashCode(), org.springframework.web.filter.GenericFilterBean#getClass(), org.springframework.web.filter.GenericFilterBean#notify(), org.springframework.web.filter.GenericFilterBean#notifyAll(), org.springframework.web.filter.GenericFilterBean#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        protected static final java.lang.String ALREADY_FILTERED_ATTR_NAME

        +

        +
      • +
      + + +
        +
      • +

        protected static final java.lang.String JAVA_LANG_EXCEPTION

        +

        +
      • +
      + + +
        +
      • +

        protected static final int JAVA_LANG_EXCEPTION_LENGTH

        +

        +
      • +
      + +
    • +
    + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        final org.springframework.security.web.FilterChainProxy filterChainProxy

        +

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        DebugFilter(org.springframework.security.web.FilterChainProxy fcp)

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        protected void debugLog(boolean dumpStack, java.lang.String message, java.lang.Object[] args)

        +

        +
      • +
      + + +
        +
      • +

        void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res, javax.servlet.FilterChain filterChain)

        +

        +
      • +
      + + +
        +
      • +

        protected java.lang.String formatFilters(java.util.List<javax.servlet.Filter> filters)

        +

        +
      • +
      + + +
        +
      • +

        protected java.util.List<javax.servlet.Filter> getFilters(javax.servlet.http.HttpServletRequest request)

        +

        +
      • +
      + + +
        +
      • +

        protected void invokeWithWrappedRequest(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.FilterChain filterChain)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/GrailsAnonymousAuthenticationFilter.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/GrailsAnonymousAuthenticationFilter.html new file mode 100644 index 000000000..9719bdc5b --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/GrailsAnonymousAuthenticationFilter.html @@ -0,0 +1,399 @@ + + + + + + + + + + + GrailsAnonymousAuthenticationFilter (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.filter
+ +

[Groovy] Class GrailsAnonymousAuthenticationFilter

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.util.logging.Slf4j
    +@groovy.transform.CompileStatic
    +class GrailsAnonymousAuthenticationFilter
    +extends org.springframework.web.filter.GenericFilterBean
    + +

    Replaces org.springframework.security.web.authentication.AnonymousAuthenticationFilter.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + + + + + + +
        Properties 
        TypeName and description
        org.springframework.security.authentication.AuthenticationDetailsSource<javax.servlet.http.HttpServletRequest, ?> authenticationDetailsSource
        Dependency injection for authenticationDetailsSource.
        java.lang.String key
        Dependency injection for the key.
        +
      +
    • +
    + + + + + + + + + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voidafterPropertiesSet()
        protected voidapplyAnonymousForThisRequest(javax.servlet.http.HttpServletRequest request)
        protected org.springframework.security.core.AuthenticationcreateAuthentication(javax.servlet.http.HttpServletRequest request)
        voiddoFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res, javax.servlet.FilterChain chain)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class org.springframework.web.filter.GenericFilterBeanorg.springframework.web.filter.GenericFilterBean#getEnvironment(), org.springframework.web.filter.GenericFilterBean#setEnvironment(org.springframework.core.env.Environment), org.springframework.web.filter.GenericFilterBean#afterPropertiesSet(), org.springframework.web.filter.GenericFilterBean#setServletContext(javax.servlet.ServletContext), org.springframework.web.filter.GenericFilterBean#setBeanName(java.lang.String), org.springframework.web.filter.GenericFilterBean#getFilterConfig(), org.springframework.web.filter.GenericFilterBean#init(javax.servlet.FilterConfig), org.springframework.web.filter.GenericFilterBean#destroy(), org.springframework.web.filter.GenericFilterBean#wait(long), org.springframework.web.filter.GenericFilterBean#wait(long, int), org.springframework.web.filter.GenericFilterBean#wait(), org.springframework.web.filter.GenericFilterBean#equals(java.lang.Object), org.springframework.web.filter.GenericFilterBean#toString(), org.springframework.web.filter.GenericFilterBean#hashCode(), org.springframework.web.filter.GenericFilterBean#getClass(), org.springframework.web.filter.GenericFilterBean#notify(), org.springframework.web.filter.GenericFilterBean#notifyAll(), org.springframework.web.filter.GenericFilterBean#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        org.springframework.security.authentication.AuthenticationDetailsSource<javax.servlet.http.HttpServletRequest, ?> authenticationDetailsSource

        +

        Dependency injection for authenticationDetailsSource.

        +
      • +
      + + +
        +
      • +

        java.lang.String key

        +

        Dependency injection for the key.

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        GrailsAnonymousAuthenticationFilter()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        @java.lang.Override +void afterPropertiesSet()

        +

        +
      • +
      + + +
        +
      • +

        protected void applyAnonymousForThisRequest(javax.servlet.http.HttpServletRequest request)

        +

        +
      • +
      + + +
        +
      • +

        protected org.springframework.security.core.Authentication createAuthentication(javax.servlet.http.HttpServletRequest request)

        +

        +
      • +
      + + +
        +
      • +

        @java.lang.Override +void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res, javax.servlet.FilterChain chain)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/GrailsRememberMeAuthenticationFilter.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/GrailsRememberMeAuthenticationFilter.html new file mode 100644 index 000000000..a899ffdd4 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/GrailsRememberMeAuthenticationFilter.html @@ -0,0 +1,399 @@ + + + + + + + + + + + GrailsRememberMeAuthenticationFilter (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.filter
+ +

[Groovy] Class GrailsRememberMeAuthenticationFilter

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class GrailsRememberMeAuthenticationFilter
    +extends org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter
    + +

    Stores a SavedRequest so remember-me autologin gets redirected to requested url.

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +

      Field Summary

      +
        + + + + + + + + + + + + + + +
        Fields 
        ModifiersNameDescription
        protected org.springframework.security.web.savedrequest.RequestCache requestCache
        +
      +
    • + +
    + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        boolean createSessionOnSuccess
        Dependency injection for createSessionOnSuccess.
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      +
        + + + + + + + + + + +
        Constructors 
        Constructor and description
        + GrailsRememberMeAuthenticationFilter + (org.springframework.security.authentication.AuthenticationManager authenticationManager, org.springframework.security.web.authentication.RememberMeServices rememberMeServices, org.springframework.security.web.savedrequest.RequestCache requestCache)
        +
      +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        voidafterPropertiesSet()
        protected voidonSuccessfulAuthentication(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, org.springframework.security.core.Authentication authResult)
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilterorg.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#getRememberMeServices(), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#afterPropertiesSet(), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#setSecurityContextHolderStrategy(org.springframework.security.core.context.SecurityContextHolderStrategy), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#setAuthenticationSuccessHandler(org.springframework.security.web.authentication.AuthenticationSuccessHandler), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#setSecurityContextRepository(org.springframework.security.web.context.SecurityContextRepository), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#getEnvironment(), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#setEnvironment(org.springframework.core.env.Environment), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#setServletContext(javax.servlet.ServletContext), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#setBeanName(java.lang.String), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#getFilterConfig(), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#init(javax.servlet.FilterConfig), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#destroy(), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#wait(long), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#wait(long, int), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#wait(), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#equals(java.lang.Object), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#toString(), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#hashCode(), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#getClass(), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#notify(), org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        protected org.springframework.security.web.savedrequest.RequestCache requestCache

        +

        +
      • +
      + +
    • +
    + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        boolean createSessionOnSuccess

        +

        Dependency injection for createSessionOnSuccess.

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        GrailsRememberMeAuthenticationFilter(org.springframework.security.authentication.AuthenticationManager authenticationManager, org.springframework.security.web.authentication.RememberMeServices rememberMeServices, org.springframework.security.web.savedrequest.RequestCache requestCache)

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        @java.lang.Override +void afterPropertiesSet()

        +

        +
      • +
      + + +
        +
      • +

        @java.lang.Override +protected void onSuccessfulAuthentication(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, org.springframework.security.core.Authentication authResult)

        +

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/HttpMethodOverrideDetector.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/HttpMethodOverrideDetector.html new file mode 100644 index 000000000..184cadc04 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/HttpMethodOverrideDetector.html @@ -0,0 +1,370 @@ + + + + + + + + + + + HttpMethodOverrideDetector (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.filter
+ +

[Groovy] Class HttpMethodOverrideDetector

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.transform.CompileStatic
    +class HttpMethodOverrideDetector
    +extends java.lang.Object
    + +
  • +
+
+ +
+
    +
  • + + + + + + + + + + + + + + + + + + +
      +
    • +

      Constructor Summary

      + +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        java.lang.StringgetHttpMethodOverride(javax.servlet.http.HttpServletRequest request)
        voidsetMethodParam(java.lang.String methodParam)
        Set the parameter name to look for HTTP methods.
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class java.lang.Objectjava.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        public static final java.lang.String DEFAULT_METHOD_PARAM

        +

        Default method parameter: _method

        +
      • +
      + + +
        +
      • +

        public static final java.lang.String HEADER_X_HTTP_METHOD_OVERRIDE

        +

        +
      • +
      + +
    • +
    + + + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        HttpMethodOverrideDetector()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        java.lang.String getHttpMethodOverride(javax.servlet.http.HttpServletRequest request)

        +

        +
      • +
      + + +
        +
      • +

        void setMethodParam(java.lang.String methodParam)

        +

        Set the parameter name to look for HTTP methods.

        See Also:
        DEFAULT_METHOD_PARAM

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/IpAddressFilter.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/IpAddressFilter.html new file mode 100644 index 000000000..fd6dfd265 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/IpAddressFilter.html @@ -0,0 +1,503 @@ + + + + + + + + + + + IpAddressFilter (spring-security-core 6.0.2 API) + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ +
Package: grails.plugin.springsecurity.web.filter
+ +

[Groovy] Class IpAddressFilter

+
+
+ +
+
    +
  • + + + +
    +
    + +
    @groovy.util.logging.Slf4j
    +@groovy.transform.CompileStatic
    +class IpAddressFilter
    +extends org.springframework.web.filter.GenericFilterBean
    + +

    Blocks access to protected resources based on IP address. Sends 404 rather than + reporting error to hide visibility of the resources. +
    + Supports either single IP addresses or CIDR masked patterns + (e.g. 192.168.1.0/24, 202.24.0.0/14, 10.0.0.0/8, etc.).

    Authors:
    Burt Beckwith

    + +
  • +
+
+ +
+
    +
  • + + + + + + + +
      +
    • +

      Field Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        ModifiersNameDescription
        protected static java.lang.String IPV4_LOOPBACK
        protected static java.lang.String IPV6_LOOPBACK
        protected org.springframework.util.AntPathMatcher pathMatcher
        protected java.util.List<InterceptedUrl> restrictions
        +
      +
    • + +
    + + + + +
      +
    • +

      Properties Summary

      +
        + + + + + + + + + + + + +
        Properties 
        TypeName and description
        boolean allowLocalhost
        Dependency injection for whether to allow localhost calls (useful for testing).
        +
      +
    • +
    + + + + + + + +
      +
    • +

      Constructor Summary

      +
        + + + + + + + + + + +
        Constructors 
        Constructor and description
        + IpAddressFilter + ()
        +
      +
    • +
    + + + + +
      + +
    • +

      Methods Summary

      +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Methods 
        Type ParamsReturn TypeName and description
        protected voiddeny(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res)
        voiddoFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res, javax.servlet.FilterChain chain)
        protected java.util.List<InterceptedUrl>findMatchingRules(java.lang.String uri)
        protected voidinitFilterBean()
        protected booleanisAllowed(javax.servlet.http.HttpServletRequest request)
        voidsetIpRestrictions(java.util.List<java.util.Map<java.lang.String, java.lang.Object>> ipRestrictions)
        Dependency injection for the ip/pattern restriction map.
        +
      +
    • + +
    • +

      Inherited Methods Summary

      +
        + + + + + + + + + + + +
        Inherited Methods 
        Methods inherited from className
        class org.springframework.web.filter.GenericFilterBeanorg.springframework.web.filter.GenericFilterBean#getEnvironment(), org.springframework.web.filter.GenericFilterBean#setEnvironment(org.springframework.core.env.Environment), org.springframework.web.filter.GenericFilterBean#afterPropertiesSet(), org.springframework.web.filter.GenericFilterBean#setServletContext(javax.servlet.ServletContext), org.springframework.web.filter.GenericFilterBean#setBeanName(java.lang.String), org.springframework.web.filter.GenericFilterBean#getFilterConfig(), org.springframework.web.filter.GenericFilterBean#init(javax.servlet.FilterConfig), org.springframework.web.filter.GenericFilterBean#destroy(), org.springframework.web.filter.GenericFilterBean#wait(long), org.springframework.web.filter.GenericFilterBean#wait(long, int), org.springframework.web.filter.GenericFilterBean#wait(), org.springframework.web.filter.GenericFilterBean#equals(java.lang.Object), org.springframework.web.filter.GenericFilterBean#toString(), org.springframework.web.filter.GenericFilterBean#hashCode(), org.springframework.web.filter.GenericFilterBean#getClass(), org.springframework.web.filter.GenericFilterBean#notify(), org.springframework.web.filter.GenericFilterBean#notifyAll(), org.springframework.web.filter.GenericFilterBean#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
        +
      +
    • + +
    + +
  • +
+
+ +
+
    +
  • + + + + +
      +
    • + + +

      Field Detail

      + + +
        +
      • +

        protected static final java.lang.String IPV4_LOOPBACK

        +

        +
      • +
      + + +
        +
      • +

        protected static final java.lang.String IPV6_LOOPBACK

        +

        +
      • +
      + + +
        +
      • +

        protected final org.springframework.util.AntPathMatcher pathMatcher

        +

        +
      • +
      + + + + +
    • +
    + + + + +
      +
    • + + +

      Property Detail

      + + +
        +
      • +

        boolean allowLocalhost

        +

        Dependency injection for whether to allow localhost calls (useful for testing). TODO document.

        +
      • +
      + +
    • +
    + + + + + + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        IpAddressFilter()

        +

        +
      • +
      + +
    • +
    + + + + + +
      +
    • + + +

      Method Detail

      + + +
        +
      • +

        protected void deny(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res)

        +

        +
      • +
      + + +
        +
      • +

        void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res, javax.servlet.FilterChain chain)

        +

        +
      • +
      + + +
        +
      • +

        protected java.util.List<InterceptedUrl> findMatchingRules(java.lang.String uri)

        +

        +
      • +
      + + +
        +
      • +

        @java.lang.Override +protected void initFilterBean()

        +

        +
      • +
      + + +
        +
      • +

        protected boolean isAllowed(javax.servlet.http.HttpServletRequest request)

        +

        +
      • +
      + + +
        +
      • +

        void setIpRestrictions(java.util.List<java.util.Map<java.lang.String, java.lang.Object>> ipRestrictions)

        +

        Dependency injection for the ip/pattern restriction map. Keys are URL patterns and values + are either single Strings or Lists of Strings + representing IP address patterns to allow for the specified URLs.

        Parameters:
        ipRestrictions - the map

        +
      • +
      + +
    • +
    + +
  • +
+
+ + + +
+ + + + + +
+ + +
+ + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/package-frame.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/package-frame.html new file mode 100644 index 000000000..129d9da44 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/package-frame.html @@ -0,0 +1,58 @@ + + + + + grails.plugin.springsecurity.web.filter + + + + + + + + + + +
+ grails.plugin.springsecurity.web.filter +
+ + + + + +
+

Classes

+ +
+ + + + + + + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/package-summary.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/package-summary.html new file mode 100644 index 000000000..b37121bd5 --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/filter/package-summary.html @@ -0,0 +1,184 @@ + + + + + +grails.plugin.springsecurity.web.filter (spring-security-core 6.0.2 API) + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + +
+

Package grails.plugin.springsecurity.web.filter

+
+ + + +
+ + + + +
+ +
+ + + + + + + +
+ + +
+ + + + + +
+ + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/package-frame.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/package-frame.html new file mode 100644 index 000000000..1f080745d --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/package-frame.html @@ -0,0 +1,58 @@ + + + + + grails.plugin.springsecurity.web + + + + + + + + + + +
+ grails.plugin.springsecurity.web +
+ + + + + +
+

Classes

+ +
+ + + + + + + + + + diff --git a/6.0.2/groovydoc/grails/plugin/springsecurity/web/package-summary.html b/6.0.2/groovydoc/grails/plugin/springsecurity/web/package-summary.html new file mode 100644 index 000000000..56529e83e --- /dev/null +++ b/6.0.2/groovydoc/grails/plugin/springsecurity/web/package-summary.html @@ -0,0 +1,203 @@ + + + + + +grails.plugin.springsecurity.web (spring-security-core 6.0.2 API) + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + +
+

Package grails.plugin.springsecurity.web

+
+ + + +
+ + + + +
+ +
+ + + + + + + +
+ + +
+ + + + + +
+ + + + + diff --git a/6.0.2/groovydoc/groovy.ico b/6.0.2/groovydoc/groovy.ico new file mode 100644 index 000000000..9e9b8d81a Binary files /dev/null and b/6.0.2/groovydoc/groovy.ico differ diff --git a/6.0.2/groovydoc/help-doc.html b/6.0.2/groovydoc/help-doc.html new file mode 100644 index 000000000..723848b0c --- /dev/null +++ b/6.0.2/groovydoc/help-doc.html @@ -0,0 +1,196 @@ + + + + + + + + + API Help (spring-security-core 6.0.2 API) + + + + + + + + + +
+ + + + + +
+ + + +
+

How This API Document Is Organized

+
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
+
+
+ + This help file applies to API documentation generated using the standard doclet.
+ +
+ + + + + +
+ + + + diff --git a/6.0.2/groovydoc/index-all.html b/6.0.2/groovydoc/index-all.html new file mode 100644 index 000000000..bc60c33d0 --- /dev/null +++ b/6.0.2/groovydoc/index-all.html @@ -0,0 +1,1690 @@ + + + + + + + + Index (spring-security-core 6.0.2 API) + + + + + + + + +
+ + + + + +
+ + +
+ +A + +B + +C + +D + +E + +F + +G + +H + +I + +J + +K + +L + +M + +N + +O + +P + +Q + +R + +S + +T + +U + +V + +W + +X + +Y + +Z + +_ + + + + +

A

+
+ +
AbstractFilterInvocationDefinition - Class in grails.plugin.springsecurity.web.access.intercept +
Authors:
Burt Beckwith
+
AbstractFilterInvocationDefinition() - Constructor in AbstractFilterInvocationDefinition +
+
access - Property in SecurityTagLib +
Renders the body if the specified expression (a String; the 'expression' attribute) + evaluates to true or if the specified URL is allowed.
+
afterInvocationManagerProviderNames - Property in SpringSecurityUtils +
AfterInvocationProvider names.
+
afterPropertiesSet() - Method in AjaxAwareAccessDeniedHandler +
+
afterPropertiesSet() - Method in AjaxAwareAuthenticationFailureHandler +
+
afterPropertiesSet() - Method in ChannelFilterInvocationSecurityMetadataSourceFactoryBean +
+
afterPropertiesSet() - Method in GrailsAnonymousAuthenticationFilter +
+
afterPropertiesSet() - Method in GrailsRememberMeAuthenticationFilter +
+
afterPropertiesSet() - Method in GrailsUsernamePasswordAuthenticationFilter +
+
AJAX_HEADER - Field in SpringSecurityUtils +
Default value for the name of the Ajax header.
+
ajaxAuthenticationFailureUrl - Property in AjaxAwareAuthenticationFailureHandler +
Dependency injection for the Ajax auth fail url.
+
AjaxAwareAccessDeniedHandler - Class in grails.plugin.springsecurity.web.access +
Authors:
Burt Beckwith
+
AjaxAwareAccessDeniedHandler() - Constructor in AjaxAwareAccessDeniedHandler +
+
AjaxAwareAuthenticationEntryPoint - Class in grails.plugin.springsecurity.web.authentication +
Authors:
Burt Beckwith
+
AjaxAwareAuthenticationEntryPoint(java.lang.String) - Constructor in AjaxAwareAuthenticationEntryPoint +
Parameters:
loginFormUrl - URL where the login page can be found.
+
AjaxAwareAuthenticationFailureHandler - Class in grails.plugin.springsecurity.web.authentication +
Ajax-aware failure handler that detects failed Ajax logins and redirects to the appropriate URL.
+
AjaxAwareAuthenticationFailureHandler() - Constructor in AjaxAwareAuthenticationFailureHandler +
+
AjaxAwareAuthenticationSuccessHandler - Class in grails.plugin.springsecurity.web.authentication +
Authors:
Burt Beckwith
+
AjaxAwareAuthenticationSuccessHandler() - Constructor in AjaxAwareAuthenticationSuccessHandler +
+
ajaxDenied() - Method in LoginController +
The Ajax denied redirect url.
+
ajaxErrorPage - Field in AjaxAwareAccessDeniedHandler +
+
ajaxLoginFormUrl - Field in AjaxAwareAuthenticationEntryPoint +
+
ajaxSuccess() - Method in LoginController +
The Ajax success redirect url.
+
ajaxSuccessUrl - Property in AjaxAwareAuthenticationSuccessHandler +
Dependency injection for the Ajax success url, e.g.
+
ALLOW404 - Field in AbstractFilterInvocationDefinition +
+
allowLocalhost - Property in IpAddressFilter +
Dependency injection for whether to allow localhost calls (useful for testing).
+
ALREADY_FILTERED_ATTR_NAME - Field in DebugFilter +
+
Annotation - Field in SecurityConfigType +
Annotations in controllers.
+
AnnotationFilterInvocationDefinition - Class in grails.plugin.springsecurity.web.access.intercept +
A org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource that uses rules defined with + Controller annotations combined with static rules defined in + SecurityConfig.groovy, e.g. for js, images, css or for rules + that cannot be expressed in a controller like '/**'.
+
AnnotationFilterInvocationDefinition() - Constructor in AnnotationFilterInvocationDefinition +
+
ANONYMOUS_FILTER - Field in SecurityFilterPosition +
Anonymous auth
+
ANY_METHOD - Field in Secured +
Default value for httpMethod().
+
Application - Class in grails.plugin.springsecurity +
Authors:
Burt Beckwith
+
application - Property in AnnotationFilterInvocationDefinition +
Dependency injection for the application.
+
Application() - Constructor in Application +
+
application - Property in ReflectionUtils +
+
applicationContext - Property in ClosureVoter +
+
applicationContext - Property in SecurityEventListener +
+
applyAnonymousForThisRequest(javax.servlet.http.HttpServletRequest) - Method in GrailsAnonymousAuthenticationFilter +
+
asList(java.lang.Object) - Method in ReflectionUtils +
+
assertAttribute(java.lang.String, java.lang.Object, java.lang.String) - Method in SecurityTagLib +
+
attemptAuthentication(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) - Method in GrailsUsernamePasswordAuthenticationFilter +
+
auth() - Method in LoginController +
Show the login page.
+
authAjax() - Method in LoginController +
The redirect action for Ajax requests.
+
authenticate(org.springframework.security.core.Authentication) - Method in GrailsAnonymousAuthenticationProvider +
+
AuthenticatedVetoableDecisionManager - Class in grails.plugin.springsecurity.access.vote +
Uses the affirmative-based logic for roles, i.e. any in the list will grant access, but allows + an authenticated voter to 'veto' access.
+
AuthenticatedVetoableDecisionManager(List<AccessDecisionVoter>) - Constructor in AuthenticatedVetoableDecisionManager +
+
authenticatedVoter - Field in AbstractFilterInvocationDefinition +
+
authenticationDetailsSource - Property in GrailsAnonymousAuthenticationFilter +
Dependency injection for authenticationDetailsSource.
+
authenticationTrustResolver - Property in AjaxAwareAccessDeniedHandler +
Dependency injection for the org.springframework.security.authentication.AuthenticationTrustResolver.
+
authenticationTrustResolver - Property in LoginController +
Dependency injection for the authenticationTrustResolver.
+
authenticationTrustResolver - Property in SpringSecurityService +
dependency injection for authenticationTrustResolver
+
authfail() - Method in LoginController +
Callback after a failed login.
+
author - Property in SpringSecurityCoreGrailsPlugin +
+
authorEmail - Property in SpringSecurityCoreGrailsPlugin +
+
Authorities - Annotation Type in grails.plugin.springsecurity.annotation +
Specify the property file key with this annotation, and the AST transform + class will replace with an
Secured:
annotation with the associated role names.
+
authoritiesToRoles(java.lang.Object) - Method in SpringSecurityUtils +
Extract the role names from authorities.
+
AuthoritiesTransformation - Class in grails.plugin.springsecurity.annotation +
See http://burtbeckwith.com/blog/?
+
AuthoritiesTransformation() - Constructor in AuthoritiesTransformation +
+
authorizeExpression - Property in WebExpressionConfigAttribute +
+
AUTOCONFIG_NAME - Field in SpringSecurityBeanFactoryPostProcessor +
+
+ + + +

B

+
+ +
BASIC_AUTH_FILTER - Field in SecurityFilterPosition +
Basic Auth
+
BeanTypeResolver - Class in grails.plugin.springsecurity +
Used in doWithSpring to allow overriding of the class of individual Spring beans by setting a property in the config. +
+
BeanTypeResolver(groovy.util.ConfigObject, grails.core.GrailsApplication) - Constructor in BeanTypeResolver +
+
buildAnnotationNode(java.lang.String) - Method in AuthoritiesTransformation +
+
buildConfigAttributes(Collection<String>, boolean) - Method in ReflectionUtils +
+
buildFilterChains(SortedMap<Integer, String>, List<Map<String, ?>>, List<GrailsSecurityFilterChain>, org.springframework.context.ApplicationContext) - Method in SpringSecurityUtils +
+
buildMap() - Method in ChannelFilterInvocationSecurityMetadataSourceFactoryBean +
+
+ + + +

C

+
+ +
calculateRedirectUrl(javax.servlet.http.HttpServletRequest, java.lang.String) - Method in GrailsRedirectStrategy +
+
calculateUri(javax.servlet.http.HttpServletRequest) - Method in AbstractFilterInvocationDefinition +
Resolve the URI from javax.servlet.http.HttpServletRequest
+
call(org.springframework.context.ApplicationEvent, java.lang.String) - Method in SecurityEventListener +
+
CAS_FILTER - Field in SecurityFilterPosition +
CAS
+
CHANNEL_FILTER - Field in SecurityFilterPosition +
HTTP/HTTPS channel filter
+
ChannelFilterInvocationSecurityMetadataSourceFactoryBean - Class in grails.plugin.springsecurity.web.access.intercept +
Factory bean that builds a org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource for channel security.
+
ChannelFilterInvocationSecurityMetadataSourceFactoryBean() - Constructor in ChannelFilterInvocationSecurityMetadataSourceFactoryBean +
+
check(org.springframework.security.core.userdetails.UserDetails) - Method in DefaultPostAuthenticationChecks +
+
check(org.springframework.security.core.userdetails.UserDetails) - Method in DefaultPreAuthenticationChecks +
+
checkAuthenticatedVoters(org.springframework.security.core.Authentication, java.lang.Object, Collection<ConfigAttribute>) - Method in AuthenticatedVetoableDecisionManager +
Allow any org.springframework.security.access.vote.AuthenticatedVoter to veto.
+
checkOtherVoters(org.springframework.security.core.Authentication, java.lang.Object, Collection<ConfigAttribute>) - Method in AuthenticatedVetoableDecisionManager +
Check the other (non-org.springframework.security.access.vote.AuthenticatedVoter) voters.
+
clearCachedRequestmaps() - Method in SpringSecurityService +
Call when editing, creating, or deleting a Requestmap to flush the cached + configuration and rebuild using the most recent data.
+
clientRegisterFilter(java.lang.String, int) - Method in SpringSecurityUtils +
Register a filter in a specified position in the chain.
+
closure - Property in ClosureConfigAttribute +
+
closure - Property in ClosureX509PrincipalExtractor +
Dependency injection for the closure to use to extract the username.
+
closure() - Method in Secured +
Optional attribute to specify a closure that will be evaluated to decide if access should be allowed.
+
closureClass - Property in InterceptedUrl +
+
ClosureConfigAttribute - Class in grails.plugin.springsecurity.access.vote +
Authors:
Burt Beckwith
+
ClosureConfigAttribute(Closure<?>) - Constructor in ClosureConfigAttribute +
Constructor.
+
ClosureVoter - Class in grails.plugin.springsecurity.access.vote +
Authors:
Burt Beckwith
+
ClosureVoter() - Constructor in ClosureVoter +
+
ClosureX509PrincipalExtractor - Class in grails.plugin.springsecurity.web.authentication.preauth.x509 +
Authors:
Burt Beckwith
+
ClosureX509PrincipalExtractor() - Constructor in ClosureX509PrincipalExtractor +
+
CommandLineHelper - Trait in grails.plugin.springsecurity +
+
commence(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.springframework.security.core.AuthenticationException) - Method in AjaxAwareAuthenticationEntryPoint +
+
compileActionClosures(Map<String, List<InterceptedUrl>>) - Method in AnnotationFilterInvocationDefinition +
+
compileActionRoles(Map<String, List<InterceptedUrl>>) - Method in AnnotationFilterInvocationDefinition +
+
compileAndStoreMapping(grails.plugin.springsecurity.InterceptedUrl) - Method in AbstractFilterInvocationDefinition +
+
compileClassClosures(List<InterceptedUrl>) - Method in AnnotationFilterInvocationDefinition +
+
compileClassRoles(List<InterceptedUrl>) - Method in AnnotationFilterInvocationDefinition +
+
compiled - Field in AbstractFilterInvocationDefinition +
+
compileStaticRules(java.lang.Object) - Method in AnnotationFilterInvocationDefinition +
+
CONCURRENT_SESSION_FILTER - Field in SecurityFilterPosition +
Concurrent Sessions
+
conf - Field in BeanTypeResolver +
+
configAttributes - Property in InterceptedUrl +
+
configuredOrderedFilters - Property in SpringSecurityUtils +
Set by SpringSecurityCoreGrailsPlugin contains the actual filter beans in order.
+
configureMapping(grails.web.mapping.UrlMappingInfo, org.grails.web.servlet.mvc.GrailsWebRequest, Map<String, Object>) - Method in AnnotationFilterInvocationDefinition +
+
consoleLogger - Property in S2CreatePersistentTokenCommand +
+
consoleLogger - Property in S2CreateRoleHierarchyEntryCommand +
+
consoleLogger - Property in S2QuickstartCommand +
+
ControllerMixin - Trait in grails.plugin.springsecurity +
Authors:
Burt Beckwith
+
copyParams(org.grails.web.servlet.mvc.GrailsWebRequest) - Method in AnnotationFilterInvocationDefinition +
+
createAnnotation(org.codehaus.groovy.ast.AnnotationNode, org.codehaus.groovy.control.SourceUnit) - Method in AuthoritiesTransformation +
+
createAuthentication(javax.servlet.http.HttpServletRequest) - Method in GrailsAnonymousAuthenticationFilter +
+
createControllerUri(java.lang.String, java.lang.String) - Method in AnnotationFilterInvocationDefinition +
+
createFilterInvocation(java.lang.String, java.lang.String, java.lang.String) - Method in GrailsWebInvocationPrivilegeEvaluator +
+
createNewToken(org.springframework.security.web.authentication.rememberme.PersistentRememberMeToken) - Method in GormPersistentTokenRepository +
+
createRequestMaps(List<String>, java.lang.String) - Method in SpringSecurityService +
Create multiple requestmap instances in a transaction that all share the same configAttribute.
+
createSessionOnSuccess - Property in GrailsRememberMeAuthenticationFilter +
Dependency injection for createSessionOnSuccess.
+
createUserDetails(java.lang.Object, Collection<GrantedAuthority>) - Method in GormUserDetailsService +
+
ctx - Property in SecuredClosureDelegate +
+
+ + + +

D

+
+ +
DebugFilter - Class in grails.plugin.springsecurity.web.filter +
Based on the package-scope org.springframework.security.config.debug.DebugFilter.
+
DebugFilter.1 - Class in grails.plugin.springsecurity.web.filter +
+
DebugFilter.1() - Constructor in DebugFilter.1 +
+
DebugFilter(org.springframework.security.web.FilterChainProxy) - Constructor in DebugFilter +
+
debugLog(boolean, java.lang.String, java.lang.Object) - Method in DebugFilter +
+
decide(org.springframework.security.core.Authentication, java.lang.Object, Collection<ConfigAttribute>) - Method in AuthenticatedVetoableDecisionManager +
+
decide(org.springframework.security.core.Authentication, java.lang.Object, Collection<ConfigAttribute>, java.lang.Object) - Method in NullAfterInvocationManager +
+
decide(org.springframework.security.core.Authentication, java.lang.Object, Collection<ConfigAttribute>, java.lang.Object) - Method in NullAfterInvocationProvider +
+
DEFAULT_METHOD_PARAM - Field in HttpMethodOverrideDetector +
Default method parameter: _method
+
DEFAULT_TARGET_PARAMETER - Field in SpringSecurityUtils +
+
DefaultPostAuthenticationChecks - Class in grails.plugin.springsecurity.userdetails +
Copy of the private class in AbstractUserDetailsAuthenticationProvider + to make subclassing or replacement easier.
+
DefaultPostAuthenticationChecks() - Constructor in DefaultPostAuthenticationChecks +
+
DefaultPreAuthenticationChecks - Class in grails.plugin.springsecurity.userdetails +
Copy of the private class in AbstractUserDetailsAuthenticationProvider + to make subclassing or replacement easier.
+
DefaultPreAuthenticationChecks() - Constructor in DefaultPreAuthenticationChecks +
+
DefaultThrowableAnalyzer - Class in grails.plugin.springsecurity.web.access +
Copy of org.springframework.security.web.access.ExceptionTranslationFilter.DefaultThrowableAnalyzer which is private.
+
DefaultThrowableAnalyzer.1 - Class in grails.plugin.springsecurity.web.access +
+
DefaultThrowableAnalyzer.1() - Constructor in DefaultThrowableAnalyzer.1 +
+
DefaultThrowableAnalyzer() - Constructor in DefaultThrowableAnalyzer +
+
definition - Property in ChannelFilterInvocationSecurityMetadataSourceFactoryBean +
Dependency injection for the definition maps.
+
deleteRole(java.lang.Object) - Method in SpringSecurityService +
Delete a role, and if Requestmap class is used to store roles, remove the role + from all Requestmap definitions.
+
denied() - Method in LoginController +
Show denied page.
+
DENY - Field in AbstractFilterInvocationDefinition +
+
deny() - Method in AuthenticatedVetoableDecisionManager +
+
deny(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) - Method in IpAddressFilter +
+
description - Property in S2QuickstartCommand +
+
description - Property in SpringSecurityCoreGrailsPlugin +
+
determineSource() - Method in SecurityTagLib +
+
determineUrl(org.springframework.security.web.FilterInvocation) - Method in AbstractFilterInvocationDefinition +
+
determineUrl(org.springframework.security.web.FilterInvocation) - Method in AnnotationFilterInvocationDefinition +
+
determineUrlToUseForThisRequest(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.springframework.security.core.AuthenticationException) - Method in AjaxAwareAuthenticationEntryPoint +
+
DIGEST_AUTH_FILTER - Field in SecurityFilterPosition +
Digest auth
+
disableFilterRegistrationBeans(org.springframework.beans.factory.support.BeanDefinitionRegistry) - Method in SpringSecurityBeanFactoryPostProcessor +
Need to add a FilterRegistrationBean with enabled set to false to prevent Boot from + registering all of the filters in the filterchains again as regular filters.
+
documentation - Property in SpringSecurityCoreGrailsPlugin +
+
doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) - Method in DebugFilter +
+
doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) - Method in GrailsAnonymousAuthenticationFilter +
+
doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse) - Method in GrailsWebInvocationPrivilegeEvaluator.1 +
+
doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) - Method in IpAddressFilter +
+
doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) - Method in MutableLogoutFilter +
+
doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) - Method in SecurityRequestHolderFilter +
+
doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) - Method in UpdateRequestContextHolderExceptionTranslationFilter +
+
doStoreMapping(java.lang.String, org.springframework.http.HttpMethod, Collection<ConfigAttribute>) - Method in AnnotationFilterInvocationDefinition +
+
doWithApplicationContext() - Method in SpringSecurityCoreGrailsPlugin +
+
doWithAuth(java.lang.String, Closure<?>) - Method in SpringSecurityUtils +
Authenticate as the specified user and execute the closure with that authentication.
+
doWithSpring() - Method in SpringSecurityCoreGrailsPlugin +
+
DUMMY_CHAIN - Field in GrailsWebInvocationPrivilegeEvaluator +
+
DUMMY_CHAIN - Field in SecurityTagLib +
+
DUMMY_RESPONSE - Field in GrailsWebInvocationPrivilegeEvaluator +
+
+ + + +

E

+
+ +
encodePassword(java.lang.String) - Method in SpringSecurityService +
Encode the password using the configured PasswordEncoder.
+
ENCODING_ID_ARGON2 - Field in SpringSecurityCoreGrailsPlugin +
+
ENCODING_ID_BCRYPT - Field in SpringSecurityCoreGrailsPlugin +
+
ENCODING_ID_LDAP - Field in SpringSecurityCoreGrailsPlugin +
+
ENCODING_ID_MD4 - Field in SpringSecurityCoreGrailsPlugin +
+
ENCODING_ID_MD5 - Field in SpringSecurityCoreGrailsPlugin +
+
ENCODING_ID_NOOP - Field in SpringSecurityCoreGrailsPlugin +
+
ENCODING_ID_PBKDF2 - Field in SpringSecurityCoreGrailsPlugin +
+
ENCODING_ID_SCRYPT - Field in SpringSecurityCoreGrailsPlugin +
+
ENCODING_ID_SHA1 - Field in SpringSecurityCoreGrailsPlugin +
+
ENCODING_IDSHA256 - Field in SpringSecurityCoreGrailsPlugin +
+
ERROR404 - Field in AbstractFilterInvocationDefinition +
+
errorPage - Field in AjaxAwareAccessDeniedHandler +
+
EXCEPTION_TRANSLATION_FILTER - Field in SecurityFilterPosition +
ExceptionTranslationFilter
+
expressionCache - Field in SecurityTagLib +
+
expressionHandler - Property in WebExpressionVoter +
Dependency injection for the expression handler.
+
extractCause(java.lang.Throwable) - Method in DefaultThrowableAnalyzer.1 +
+
extractPrincipal(java.security.cert.X509Certificate) - Method in ClosureX509PrincipalExtractor +
+
+ + + +

F

+
+ +
FAILURE - Property in CommandLineHelper +
+
fillInStackTrace() - Method in NoStackUsernameNotFoundException +
+
FILTER_SECURITY_INTERCEPTOR - Field in SecurityFilterPosition +
FilterSecurityInterceptor
+
filterChainProxy - Property in DebugFilter +
+
filterProcessesUrl - Property in FilterProcessUrlRequestMatcher +
+
FilterProcessUrlRequestMatcher - Class in grails.plugin.springsecurity.web.authentication +
Based on the class of the same name which is a private static inner class in + org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.
+
FilterProcessUrlRequestMatcher(java.lang.String) - Constructor in FilterProcessUrlRequestMatcher +
+
filters - Property in GrailsSecurityFilterChain +
+
filters - Property in InterceptedUrl +
+
FILTERS_NONE - Field in SpringSecurityUtils +
+
findActionClosures(Class<?>) - Method in AnnotationFilterInvocationDefinition +
+
findActionRoles(Class<?>) - Method in AnnotationFilterInvocationDefinition +
+
findActions(Class<?>) - Method in AnnotationFilterInvocationDefinition +
+
findClosureClass(grails.plugin.springsecurity.annotation.Secured) - Method in AnnotationFilterInvocationDefinition +
+
findConfigAttribute(Collection<ConfigAttribute>) - Method in WebExpressionVoter +
+
findConfigAttributes(java.lang.String, java.lang.String) - Method in AbstractFilterInvocationDefinition +
+
findControllerAnnotations(grails.core.GrailsControllerClass, Map<String, List<InterceptedUrl>>, List<InterceptedUrl>, Map<String, List<InterceptedUrl>>, List<InterceptedUrl>) - Method in AnnotationFilterInvocationDefinition +
+
findDomainAnnotations(grails.core.GrailsDomainClass, Map<String, List<InterceptedUrl>>, List<InterceptedUrl>, Map<String, List<InterceptedUrl>>, List<InterceptedUrl>) - Method in AnnotationFilterInvocationDefinition +
+
findFilterChainNames(groovy.util.ConfigObject) - Method in ReflectionUtils +
+
findFilterChainNames(java.lang.Object, boolean, boolean, boolean, boolean, boolean, boolean) - Method in SpringSecurityUtils +
+
findGrailsUrl(grails.web.mapping.UrlMappingInfo) - Method in AnnotationFilterInvocationDefinition +
+
findMatchingAttributes(java.lang.String) - Method in AbstractFilterInvocationDefinition +
For admin/debugging - find all config attributes that apply to the specified URL (doesn't consider request method restrictions).
+
findMatchingRules(java.lang.String) - Method in IpAddressFilter +
+
findOrCreateExpression(java.lang.String) - Method in SecurityTagLib +
+
findRequestmapsByRole(java.lang.String, java.lang.Object) - Method in SpringSecurityService +
+
findSecuredAnnotation(java.lang.reflect.AccessibleObject) - Method in AnnotationFilterInvocationDefinition +
+
FIRST - Field in SecurityFilterPosition +
First
+
flagValue(java.lang.String) - Method in CommandLineHelper +
+
FORM_CONTENT_FILTER - Field in SecurityFilterPosition +
Spring FormContentFilter allows www-url-form-encoded content-types to provide params in PUT requests
+
FORM_LOGIN_FILTER - Field in SecurityFilterPosition +
UsernamePasswordAuthenticationFilter
+
formatFilters(List<Filter>) - Method in DebugFilter +
+
full() - Method in LoginController +
Login page for users with a remember-me cookie but accessing a IS_AUTHENTICATED_FULLY page.
+
+ + + +

G

+
+ +
generatePatterns(java.lang.String, java.lang.String, boolean) - Method in AnnotationFilterInvocationDefinition +
+
getAllConfigAttributes() - Method in AbstractFilterInvocationDefinition +
+
getAttribute() - Method in ClosureConfigAttribute +
+
getAttribute() - Method in WebExpressionConfigAttribute +
+
getAttributes(java.lang.Object) - Method in AbstractFilterInvocationDefinition +
+
getAuthenticatedUser() - Method in ControllerMixin +
+
getAuthentication() - Method in AjaxAwareAccessDeniedHandler +
+
getAuthentication() - Method in LoginController +
+
getAuthentication() - Method in SpringSecurityService +
Get the currently logged in user's Authentication.
+
getAuthorityNames(java.lang.String, org.codehaus.groovy.ast.AnnotationNode, org.codehaus.groovy.control.SourceUnit) - Method in AuthoritiesTransformation +
+
getClassForName(java.lang.String) - Method in SpringSecurityService +
+
getConf() - Method in LoginController +
+
getConfigAttributeMap() - Method in AbstractFilterInvocationDefinition +
For debugging.
+
getConfigProperty(java.lang.String, java.lang.Object) - Method in ReflectionUtils +
+
getCurrentUser() - Method in SpringSecurityService +
Get the domain class instance associated with the current authentication.
+
getCurrentUserId() - Method in SpringSecurityService +
+
getExecutionContext() - Method in CommandLineHelper +
+
getFilters(javax.servlet.http.HttpServletRequest) - Method in DebugFilter +
+
getGrailsServerURL() - Method in ReflectionUtils +
+
getHttpMethod(java.lang.annotation.Annotation) - Method in AnnotationFilterInvocationDefinition +
+
getHttpMethodOverride(javax.servlet.http.HttpServletRequest) - Method in HttpMethodOverrideDetector +
+
getInterceptedUrl(java.lang.String, org.springframework.http.HttpMethod) - Method in AbstractFilterInvocationDefinition +
+
getLastException(javax.servlet.http.HttpSession) - Method in SpringSecurityUtils +
Get the last auth exception.
+
getLastUsername(javax.servlet.http.HttpSession) - Method in SpringSecurityUtils +
Get the last attempted username.
+
getObject() - Method in ChannelFilterInvocationSecurityMetadataSourceFactoryBean +
+
getObjectType() - Method in ChannelFilterInvocationSecurityMetadataSourceFactoryBean +
+
getParams() - Method in SecuredClosureDelegate +
+
getPrincipal() - Method in ControllerMixin +
+
getPrincipal() - Method in SpringSecurityService +
Get the currently logged in user's principal.
+
getPrincipalAuthorities() - Method in SpringSecurityUtils +
Get the current user's authorities.
+
getRequest() - Method in SecurityRequestHolder +
Get the current request.
+
getRequestMapClass() - Method in ReflectionUtils +
+
getRequestmapConfigAttribute(java.lang.Object) - Method in ReflectionUtils +
+
getRequestmapHttpMethod(java.lang.Object) - Method in ReflectionUtils +
+
getRequestmapUrl(java.lang.Object) - Method in ReflectionUtils +
+
getResponse() - Method in SecurityRequestHolder +
Get the current response.
+
getRoleAuthority(java.lang.Object) - Method in ReflectionUtils +
+
getSavedRequest(javax.servlet.http.HttpSession) - Method in SpringSecurityUtils +
Get the saved request from the session.
+
getScheme() - Method in SecurityRequestHolderFilter.1 +
+
getScheme() - Method in SecurityRequestHolderFilter.2 +
+
getSecurityConfig() - Method in ReflectionUtils +
+
getSecurityConfig() - Method in SpringSecurityService +
+
getSecurityConfig() - Method in SpringSecurityUtils +
Parse and load the security configuration.
+
getSecurityConfigType() - Method in SpringSecurityUtils +
Lookup the security type as a String to avoid dev mode reload issues.
+
getSecurityContext(javax.servlet.http.HttpSession) - Method in SpringSecurityUtils +
+
getServerPort() - Method in SecurityRequestHolderFilter.1 +
+
getServerPort() - Method in SecurityRequestHolderFilter.2 +
+
getSession(boolean) - Method in DebugFilter.1 +
+
getSwitchedUserOriginalUsername() - Method in SpringSecurityUtils +
Get the username of the original user before switching to another.
+
getTokenForSeries(java.lang.String) - Method in GormPersistentTokenRepository +
+
getValue(java.lang.annotation.Annotation) - Method in AnnotationFilterInvocationDefinition +
+
GORM_VERSION_THRESHOLD - Field in S2QuickstartCommand +
+
GormPersistentTokenRepository - Class in grails.plugin.springsecurity.web.authentication.rememberme +
GORM-based PersistentTokenRepository implementation, based on org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl.
+
GormPersistentTokenRepository() - Constructor in GormPersistentTokenRepository +
+
GormUserDetailsService - Class in grails.plugin.springsecurity.userdetails +
Default implementation of GrailsUserDetailsService that uses + domain classes to load users and roles.
+
GormUserDetailsService() - Constructor in GormUserDetailsService +
+
GrailsAnonymousAuthenticationFilter - Class in grails.plugin.springsecurity.web.filter +
Replaces org.springframework.security.web.authentication.AnonymousAuthenticationFilter.
+
GrailsAnonymousAuthenticationFilter() - Constructor in GrailsAnonymousAuthenticationFilter +
+
GrailsAnonymousAuthenticationProvider - Class in grails.plugin.springsecurity.authentication +
Authors:
Burt Beckwith
+
GrailsAnonymousAuthenticationProvider() - Constructor in GrailsAnonymousAuthenticationProvider +
+
GrailsAnonymousAuthenticationToken - Class in grails.plugin.springsecurity.authentication +
Authors:
Burt Beckwith
+
GrailsAnonymousAuthenticationToken(java.lang.String, java.lang.Object) - Constructor in GrailsAnonymousAuthenticationToken +
Constructor.
+
grailsApplication - Field in BeanTypeResolver +
+
grailsApplication - Property in GormPersistentTokenRepository +
Dependency injection for grailsApplication.
+
grailsApplication - Property in GormUserDetailsService +
Dependency injection for the application.
+
grailsApplication - Property in SpringSecurityService +
dependency injection for grailsApplication
+
GrailsRedirectStrategy - Class in grails.plugin.springsecurity.web +
Builds absolute urls when using header check channel security to prevent the + container from generating urls with an incorrect scheme.
+
GrailsRedirectStrategy() - Constructor in GrailsRedirectStrategy +
+
GrailsRememberMeAuthenticationFilter - Class in grails.plugin.springsecurity.web.filter +
Stores a SavedRequest so remember-me autologin gets redirected to requested url.
+
GrailsRememberMeAuthenticationFilter(org.springframework.security.authentication.AuthenticationManager, org.springframework.security.web.authentication.RememberMeServices, org.springframework.security.web.savedrequest.RequestCache) - Constructor in GrailsRememberMeAuthenticationFilter +
+
GrailsSecurityFilterChain - Class in grails.plugin.springsecurity.web +
Based on org.springframework.security.web.DefaultSecurityFilterChain which is final.
+
GrailsSecurityFilterChain(java.lang.String, List<Filter>) - Constructor in GrailsSecurityFilterChain +
+
grailsUrlConverter - Property in AnnotationFilterInvocationDefinition +
Dependency injection for the grailsUrlConverter bean.
+
GrailsUser - Class in grails.plugin.springsecurity.userdetails +
Extends the default Spring Security user class to contain the ID for efficient lookup + of the domain class from the Authentication.
+
GrailsUser(java.lang.String, java.lang.String, boolean, boolean, boolean, boolean, Collection<GrantedAuthority>, java.lang.Object) - Constructor in GrailsUser +
Constructor.
+
GrailsUserDetailsService - Interface in grails.plugin.springsecurity.userdetails +
Extension of the standard interface that allows specifying whether or not to load roles + from the database, e.g. for LDAP where role information is inferred from LDAP group membership.
+
GrailsUsernamePasswordAuthenticationFilter - Class in grails.plugin.springsecurity.web.authentication +
Extends the default org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter to store the + last attempted login username in the session under the 'SPRING_SECURITY_LAST_USERNAME' + key if storeLastUsername is true.
+
GrailsUsernamePasswordAuthenticationFilter() - Constructor in GrailsUsernamePasswordAuthenticationFilter +
+
grailsVersion - Property in SpringSecurityCoreGrailsPlugin +
+
GrailsWebInvocationPrivilegeEvaluator - Class in grails.plugin.springsecurity.web.access +
createFilterInvocation() is private in the base class so this is required to create + a mock request that works with Grails - more methods get called than are expected in the mock request + that the base class uses.
+
GrailsWebInvocationPrivilegeEvaluator.1 - Class in grails.plugin.springsecurity.web.access +
+
GrailsWebInvocationPrivilegeEvaluator.1() - Constructor in GrailsWebInvocationPrivilegeEvaluator.1 +
+
GrailsWebInvocationPrivilegeEvaluator(org.springframework.security.access.intercept.AbstractSecurityInterceptor) - Constructor in GrailsWebInvocationPrivilegeEvaluator +
Constructor.
+
+ + + +

H

+
+ +
handle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.springframework.security.access.AccessDeniedException) - Method in AjaxAwareAccessDeniedHandler +
+
handle() - Method in S2CreatePersistentTokenCommand +
+
handle() - Method in S2CreateRoleHierarchyEntryCommand +
+
handle() - Method in S2QuickstartCommand +
+
handlers - Property in MutableLogoutFilter +
Dependency injection for the logout handlers.
+
hasAccess(java.lang.Object, java.lang.String) - Method in SecurityTagLib +
+
HEADER_X_HTTP_METHOD_OVERRIDE - Field in HttpMethodOverrideDetector +
+
httpMethod - Property in InterceptedUrl +
+
httpMethod() - Method in Secured +
Optional attribute to specify the HTTP method required.
+
HttpMethodOverrideDetector - Class in grails.plugin.springsecurity.web.filter +
+
HttpMethodOverrideDetector() - Constructor in HttpMethodOverrideDetector +
+
https - Property in InterceptedUrl +
+
httpServletResponseExtension - Property in AnnotationFilterInvocationDefinition +
Dependency injection for the httpServletResponseExtension bean.
+
+ + + +

I

+
+ +
id - Property in GrailsUser +
+
idToPasswordEncoder(groovy.util.ConfigObject) - Method in SpringSecurityCoreGrailsPlugin +
+
ifAllGranted - Property in SecurityTagLib +
Renders the body if all of the specified roles are granted to the user.
+
ifAllGranted(Collection<? extends GrantedAuthority>) - Method in SpringSecurityUtils +
+
ifAnyGranted - Property in SecurityTagLib +
Renders the body if any of the specified roles are granted to the user.
+
ifAnyGranted(Collection<? extends GrantedAuthority>) - Method in SpringSecurityUtils +
+
ifLoggedIn - Property in SecurityTagLib +
Renders the body if the user is authenticated.
+
ifNotGranted - Property in SecurityTagLib +
Renders the body if none of the specified roles are granted to the user.
+
ifNotGranted(Collection<? extends GrantedAuthority>) - Method in SpringSecurityUtils +
+
ifNotLoggedIn - Property in SecurityTagLib +
Renders the body if the user is not authenticated.
+
ifNotSwitched - Property in SecurityTagLib +
Renders the body if the user is not authenticated as another user via run-as.
+
ifSwitched - Property in SecurityTagLib +
Renders the body if the user is authenticated as another user via run-as.
+
index() - Method in LoginController +
Default action; redirects to 'defaultTargetUrl' if logged in, /login/auth otherwise.
+
index() - Method in LogoutController +
Index action.
+
initExtractorMap() - Method in DefaultThrowableAnalyzer +
+
initFilterBean() - Method in IpAddressFilter +
+
initialize() - Method in AbstractFilterInvocationDefinition +
+
initialize(java.lang.Object, grails.web.mapping.UrlMappingsHolder, grails.core.GrailsClass, grails.core.GrailsClass) - Method in AnnotationFilterInvocationDefinition +
Called by the plugin to set controller role info.
+
initialize() - Method in InterceptUrlMapFilterInvocationDefinition +
+
initialize() - Method in RequestmapFilterInvocationDefinition +
+
initialized - Field in AbstractFilterInvocationDefinition +
+
insecureHeaderName - Property in SecurityRequestHolderFilter +
+
insecureHeaderValue - Property in SecurityRequestHolderFilter +
+
InterceptedUrl - Class in grails.plugin.springsecurity +
Authors:
Burt Beckwith
+
InterceptedUrl(java.lang.String, Class<?>, org.springframework.http.HttpMethod) - Constructor in InterceptedUrl +
+
interceptor - Field in GrailsWebInvocationPrivilegeEvaluator +
+
InterceptUrlMap - Field in SecurityConfigType +
Map defined in Config.groovy.
+
InterceptUrlMapFilterInvocationDefinition - Class in grails.plugin.springsecurity.web.access.intercept +
Authors:
Burt Beckwith
+
InterceptUrlMapFilterInvocationDefinition() - Constructor in InterceptUrlMapFilterInvocationDefinition +
+
invokeWithWrappedRequest(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, javax.servlet.FilterChain) - Method in DebugFilter +
+
IpAddressFilter - Class in grails.plugin.springsecurity.web.filter +
Blocks access to protected resources based on IP address.
+
IpAddressFilter() - Constructor in IpAddressFilter +
+
IPV4_LOOPBACK - Field in IpAddressFilter +
+
IPV6_LOOPBACK - Field in IpAddressFilter +
+
isAjax(javax.servlet.http.HttpServletRequest) - Method in SpringSecurityService +
Check if the request was triggered by an Ajax call.
+
isAjax(javax.servlet.http.HttpServletRequest) - Method in SpringSecurityUtils +
Check if the request was triggered by an Ajax call.
+
isAllowed(java.lang.String, java.lang.String, java.lang.String, org.springframework.security.core.Authentication) - Method in GrailsWebInvocationPrivilegeEvaluator +
+
isAllowed(javax.servlet.http.HttpServletRequest) - Method in IpAddressFilter +
+
isFallback(java.lang.Object) - Method in SecurityTagLib +
+
isFlagPresent(java.lang.String) - Method in CommandLineHelper +
+
isLoggedIn() - Method in AjaxAwareAccessDeniedHandler +
+
isLoggedIn() - Method in ControllerMixin +
+
isLoggedIn() - Method in SpringSecurityService +
Quick check to see if the current user is logged in.
+
isSecure() - Method in SecurityRequestHolderFilter.1 +
+
isSecure() - Method in SecurityRequestHolderFilter.2 +
+
isSingleton() - Method in ChannelFilterInvocationSecurityMetadataSourceFactoryBean +
+
issueManagement - Property in SpringSecurityCoreGrailsPlugin +
+
isSwitched() - Method in SpringSecurityUtils +
Check if the current user is switched to another user.
+
+ + + +

J

+
+ +
JAVA_LANG_EXCEPTION - Field in DebugFilter +
+
JAVA_LANG_EXCEPTION_LENGTH - Field in DebugFilter +
+
+ + + +

K

+
+ +
key - Property in GrailsAnonymousAuthenticationFilter +
Dependency injection for the key.
+
+ + + +

L

+
+ +
LAST - Field in SecurityFilterPosition +
Last
+
license - Property in SpringSecurityCoreGrailsPlugin +
+
link - Property in SecurityTagLib +
Provides a wrapper around the standard Grails link tag g:link. +
+
loadAfter - Property in SpringSecurityCoreGrailsPlugin +
+
loadAllRequestmaps() - Method in ReflectionUtils +
+
loadAuthorities(java.lang.Object, java.lang.String, boolean) - Method in GormUserDetailsService +
+
loadCurrentUser() - Method in SpringSecurityService +
Get a proxy for the domain class instance associated with the current authentication.
+
loadRequestmaps() - Method in RequestmapFilterInvocationDefinition +
+
loadSecondaryConfig(java.lang.String) - Method in SpringSecurityUtils +
Allow a secondary plugin to add config attributes.
+
loadUserByUsername(java.lang.String) - Method in GormUserDetailsService +
+
loadUserByUsername(java.lang.String, boolean) - Method in GrailsUserDetailsService +
Locates the user based on the username.
+
loggedInUserInfo - Property in SecurityTagLib +
Renders a property (specified by the 'field' attribute) from the principal.
+
LOGIN_PAGE_FILTER - Field in SecurityFilterPosition +
Not used, generates a dynamic login form
+
LoginController - Class in grails.plugin.springsecurity +
+
LoginController() - Constructor in LoginController +
+
LOGOUT_FILTER - Field in SecurityFilterPosition +
Logout
+
logout(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.springframework.security.core.Authentication) - Method in MutableLogoutFilter.DummyLogoutHandler +
+
logout(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.springframework.security.core.Authentication) - Method in NullLogoutHandlerRememberMeServices +
+
LogoutController - Class in grails.plugin.springsecurity +
+
LogoutController() - Constructor in LogoutController +
+
logoutHandlerNames - Property in SpringSecurityUtils +
Logout handler names.
+
logoutSuccessHandler - Field in MutableLogoutFilter +
+
lookupDomainClass() - Method in GormPersistentTokenRepository +
+
lowercaseAndStripQuerystring(java.lang.String) - Method in AbstractFilterInvocationDefinition +
+
+ + + +

M

+
+ +
main(java.lang.String) - Method in Application +
+
matchAllUrlMappings(grails.web.mapping.UrlMappingsHolder, java.lang.String, org.grails.web.servlet.mvc.GrailsWebRequest, org.grails.web.mime.HttpServletResponseExtension) - Method in ReflectionUtils +
+
matcherPattern - Property in GrailsSecurityFilterChain +
+
matches(javax.servlet.http.HttpServletRequest) - Method in FilterProcessUrlRequestMatcher +
+
matches(javax.servlet.http.HttpServletRequest) - Method in GrailsSecurityFilterChain +
+
MAX_VALUE - Field in SecurityConfigType +
+
MAX_VALUE - Field in SecurityFilterPosition +
+
messages - Field in AbstractFilterInvocationDefinition +
+
messages - Field in ClosureX509PrincipalExtractor +
+
messages - Field in DefaultPostAuthenticationChecks +
+
messages - Field in DefaultPreAuthenticationChecks +
+
messageSource - Property in LoginController +
Dependency injection for the messageSource.
+
MIN_VALUE - Field in SecurityConfigType +
+
MIN_VALUE - Field in SecurityFilterPosition +
+
modifyGrantedAuthorities(org.springframework.security.core.userdetails.UserDetails, org.springframework.security.core.Authentication, Collection<? extends GrantedAuthority>) - Method in NullSwitchUserAuthorityChanger +
+
MutableLogoutFilter - Class in grails.plugin.springsecurity.web.authentication.logout +
Authors:
Burt Beckwith
+
MutableLogoutFilter.DummyLogoutHandler - Class in grails.plugin.springsecurity.web.authentication.logout +
Null logout handler that's used to provide a non-empty list of handlers to the base class. +
+
MutableLogoutFilter.DummyLogoutHandler() - Constructor in MutableLogoutFilter.DummyLogoutHandler +
+
MutableLogoutFilter(org.springframework.security.web.authentication.logout.LogoutSuccessHandler) - Constructor in MutableLogoutFilter +
Constructor.
+
+ + + +

N

+
+ +
namespace - Property in SecurityTagLib +
+
newInstance(Class<?>) - Method in AnnotationFilterInvocationDefinition +
+
next() - Method in SecurityConfigType +
+
next() - Method in SecurityFilterPosition +
+
NO_ROLE - Property in GormUserDetailsService +
Some Spring Security classes (e.g.
+
NO_ROLE - Field in SpringSecurityUtils +
Used to ensure that all authenticated users have at least one granted authority to work + around Spring Security code that assumes at least one.
+
NO_SALT - Field in SpringSecurityService +
+
noAccess - Property in SecurityTagLib +
Renders the body if the specified expression (a String; the 'expression' attribute) + evaluates to false or if the specified URL is not allowed.
+
noFilterIsApplied(List<Map<String, ?>>, java.lang.String) - Method in SpringSecurityUtils +
+
NoStackUsernameNotFoundException - Class in grails.plugin.springsecurity.userdetails +
Lightweight exception that avoids the cost of filling in the stack frames.
+
NoStackUsernameNotFoundException() - Constructor in NoStackUsernameNotFoundException +
+
NullAfterInvocationManager - Class in grails.plugin.springsecurity.access.intercept +
No-op implementation.
+
NullAfterInvocationManager() - Constructor in NullAfterInvocationManager +
+
NullAfterInvocationProvider - Class in grails.plugin.springsecurity.access +
No-op implementation.
+
NullAfterInvocationProvider() - Constructor in NullAfterInvocationProvider +
+
NullAuthenticationEventPublisher - Class in grails.plugin.springsecurity.authentication +
Authors:
Burt Beckwith
+
NullAuthenticationEventPublisher() - Constructor in NullAuthenticationEventPublisher +
+
NullAuthenticationFailureHandler - Class in grails.plugin.springsecurity.web.authentication.preauth.x509 +
Authors:
Burt Beckwith
+
NullAuthenticationFailureHandler() - Constructor in NullAuthenticationFailureHandler +
+
NullAuthenticationSuccessHandler - Class in grails.plugin.springsecurity.web.authentication.preauth.x509 +
Authors:
Burt Beckwith
+
NullAuthenticationSuccessHandler() - Constructor in NullAuthenticationSuccessHandler +
+
NullFilterChainValidator - Class in grails.plugin.springsecurity.web +
No-op validator.
+
NullFilterChainValidator() - Constructor in NullFilterChainValidator +
+
NullLogoutHandlerRememberMeServices - Class in grails.plugin.springsecurity.web.authentication +
Authors:
Burt Beckwith
+
NullLogoutHandlerRememberMeServices() - Constructor in NullLogoutHandlerRememberMeServices +
+
NullSwitchUserAuthorityChanger - Class in grails.plugin.springsecurity.web.authentication.switchuser +
No-op implementation.
+
NullSwitchUserAuthorityChanger() - Constructor in NullSwitchUserAuthorityChanger +
+
+ + + +

O

+
+ +
objectDefinitionSource - Property in SpringSecurityService +
dependency injection for org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource
+
observe - Property in SpringSecurityCoreGrailsPlugin +
+
onApplicationEvent(org.springframework.context.ApplicationEvent) - Method in SecurityEventListener +
+
onAuthenticationFailure(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.springframework.security.core.AuthenticationException) - Method in AjaxAwareAuthenticationFailureHandler +
+
onAuthenticationFailure(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.springframework.security.core.AuthenticationException) - Method in NullAuthenticationFailureHandler +
+
onAuthenticationSuccess(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.springframework.security.core.Authentication) - Method in AjaxAwareAuthenticationSuccessHandler +
+
onAuthenticationSuccess(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.springframework.security.core.Authentication) - Method in NullAuthenticationSuccessHandler +
+
onChange(Map<String, Object>) - Method in SpringSecurityCoreGrailsPlugin +
+
onConfigChange(Map<String, Object>) - Method in SpringSecurityCoreGrailsPlugin +
+
onSuccessfulAuthentication(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.springframework.security.core.Authentication) - Method in GrailsRememberMeAuthenticationFilter +
+
OPENID_FILTER - Field in SecurityFilterPosition +
OpenID
+
order - Property in SecurityFilterPosition +
The position in the chain.
+
orderedFilters - Property in SpringSecurityUtils +
Ordered filter names.
+
organization - Property in SpringSecurityCoreGrailsPlugin +
+
+ + + +

P

+
+ +
parseAuthoritiesString(java.lang.String) - Method in SpringSecurityUtils +
Split the role names and create org.springframework.security.core.GrantedAuthoritys for each.
+
PASSWORD - Field in GrailsAnonymousAuthenticationToken +
+
passwordEncoder - Property in SpringSecurityService +
dependency injection for the password encoder
+
pathMatcher - Field in IpAddressFilter +
+
pattern - Property in InterceptedUrl +
+
portMapper - Property in SecurityRequestHolderFilter +
+
portResolver - Property in AjaxAwareAccessDeniedHandler +
Dependency injection for the port resolver.
+
portResolver - Property in GrailsRedirectStrategy +
Dependency injection for the port resolver.
+
portResolver - Property in SecurityRequestHolderFilter +
+
postProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory) - Method in SpringSecurityBeanFactoryPostProcessor +
+
PRE_AUTH_FILTER - Field in SecurityFilterPosition +
Pre-auth
+
previous() - Method in SecurityConfigType +
+
previous() - Method in SecurityFilterPosition +
+
profiles - Property in SpringSecurityCoreGrailsPlugin +
+
providerNames - Property in SpringSecurityUtils +
Authentication provider names.
+
publishAuthenticationFailure(org.springframework.security.core.AuthenticationException, org.springframework.security.core.Authentication) - Method in NullAuthenticationEventPublisher +
+
publishAuthenticationSuccess(org.springframework.security.core.Authentication) - Method in NullAuthenticationEventPublisher +
+
+ + + +

Q

+
+ +
+ + + +

R

+
+ +
reauthenticate(java.lang.String, java.lang.String) - Method in SpringSecurityService +
Rebuild an Authentication for the given username and register it in the security context. +
+
reauthenticate(java.lang.String, java.lang.String) - Method in SpringSecurityUtils +
Rebuild an Authentication for the given username and register it in the security context. +
+
redirectStrategy - Property in AjaxAwareAuthenticationEntryPoint +
Dependency injection for the RedirectStrategy.
+
redirectStrategy - Property in LogoutController +
Dependency injection for RedirectStrategy.
+
ReflectionUtils - Class in grails.plugin.springsecurity +
Helper methods that use dynamic Groovy.
+
registerAfterInvocationProvider(java.lang.String) - Method in SpringSecurityUtils +
Register an AfterInvocationProvider bean name.
+
registerFilter(java.lang.String, int) - Method in SpringSecurityUtils +
Register a filter bean name in a specified position in the chain.
+
registerLogoutHandler(java.lang.String) - Method in SpringSecurityUtils +
Register a logout handler bean name.
+
registerProvider(java.lang.String) - Method in SpringSecurityUtils +
Register a provider bean name.
+
registerVoter(java.lang.String) - Method in SpringSecurityUtils +
Register a voter bean name.
+
rejectIfNoRule - Property in AbstractFilterInvocationDefinition +
Dependency injection for whether to reject if there's no matching rule.
+
reloadDBRoleHierarchy() - Method in SpringSecurityService +
Call for reloading the role hierarchy configuration from the database.
+
reloadSecurityConfig() - Method in SpringSecurityUtils +
Force a reload of the security configuration.
+
REMEMBER_ME_FILTER - Field in SecurityFilterPosition +
Remember-me cookie
+
removeAutoconfigBeans(org.springframework.beans.factory.support.BeanDefinitionRegistry) - Method in SpringSecurityBeanFactoryPostProcessor +
+
removeUserTokens(java.lang.String) - Method in GormPersistentTokenRepository +
+
reportError(java.lang.String, org.codehaus.groovy.control.SourceUnit, org.codehaus.groovy.ast.ASTNode) - Method in AuthoritiesTransformation +
+
REQUEST_CACHE_FILTER - Field in SecurityFilterPosition +
saved request filter
+
requestCache - Property in AjaxAwareAccessDeniedHandler +
Dependency injection for the request cache.
+
requestCache - Field in AjaxAwareAuthenticationSuccessHandler +
+
requestCache - Field in GrailsRememberMeAuthenticationFilter +
+
Requestmap - Field in SecurityConfigType +
Requestmap domain class.
+
requestmapClassSupportsHttpMethod() - Method in ReflectionUtils +
+
RequestmapFilterInvocationDefinition - Class in grails.plugin.springsecurity.web.access.intercept +
Authors:
Burt Beckwith
+
RequestmapFilterInvocationDefinition() - Constructor in RequestmapFilterInvocationDefinition +
+
requestMatcher - Property in GrailsSecurityFilterChain +
+
reset() - Method in AbstractFilterInvocationDefinition +
Allows subclasses to be externally reset.
+
reset() - Method in InterceptUrlMapFilterInvocationDefinition +
+
reset() - Method in RequestmapFilterInvocationDefinition +
Call at startup or when Requestmap instances have been added, removed, or changed.
+
reset() - Method in SecurityRequestHolder +
Clear the saved request.
+
resetConfigs() - Method in AbstractFilterInvocationDefinition +
+
resetSecurityConfig() - Method in SpringSecurityUtils +
Reset the config for testing or after a dev mode Config.groovy change.
+
resolveFullControllerName(java.lang.String, java.lang.String) - Method in AnnotationFilterInvocationDefinition +
+
resolveType(java.lang.String, java.lang.Class) - Method in BeanTypeResolver +
+
restrictions - Field in IpAddressFilter +
+
retainAll(java.lang.Object, java.lang.Object) - Method in SpringSecurityUtils +
Find authorities in granted that are also in required.
+
ROLE - Field in GrailsAnonymousAuthenticationToken +
+
ROLE_NAME - Field in GrailsAnonymousAuthenticationToken +
+
ROLES - Field in GrailsAnonymousAuthenticationToken +
+
roleVoter - Field in AbstractFilterInvocationDefinition +
+
+ + + +

S

+
+ +
S2CreatePersistentTokenCommand - Class in grails.plugin.springsecurity +
Creates a persistent token domain class for the Spring Security Core plugin. +
+
S2CreatePersistentTokenCommand() - Constructor in S2CreatePersistentTokenCommand +
+
S2CreateRoleHierarchyEntryCommand - Class in grails.plugin.springsecurity +
Creates a domain class for a persistent role hierarchy for the Spring Security Core plugin + Usage: .
+
S2CreateRoleHierarchyEntryCommand() - Constructor in S2CreateRoleHierarchyEntryCommand +
+
S2QuickstartCommand - Class in grails.plugin.springsecurity +
Creates domain classes and updates config settings for the Spring Security plugin. +
+
S2QuickstartCommand() - Constructor in S2QuickstartCommand +
+
SAVED_REQUEST - Field in SpringSecurityUtils +
+
scm - Property in SpringSecurityCoreGrailsPlugin +
+
Secured - Annotation Type in grails.plugin.springsecurity.annotation +
Annotation for Controllers at the class level or per-action, defining what roles + are required for the entire controller or action.
+
SECURED - Field in AuthoritiesTransformation +
+
SecuredClosureDelegate - Class in grails.plugin.springsecurity.annotation +
Set as the delegate of a closure in
Secured:
annotations; provides access to the request and application context, + as well as all of the methods and properties available when using SpEL.
+
SecuredClosureDelegate(org.springframework.security.core.Authentication, org.springframework.security.web.FilterInvocation, org.springframework.context.ApplicationContext) - Constructor in SecuredClosureDelegate +
+
secureHeaderName - Property in SecurityRequestHolderFilter +
+
secureHeaderValue - Property in SecurityRequestHolderFilter +
+
SECURITY_CONTEXT_FILTER - Field in SecurityFilterPosition +
Populates the SecurityContextHolder
+
SECURITY_PROPERTIES_NAME - Field in SpringSecurityBeanFactoryPostProcessor +
+
SecurityConfigType - Enum in grails.plugin.springsecurity +
Authors:
Burt Beckwith
+
SecurityEventListener - Class in grails.plugin.springsecurity +
Registers as an event listener and delegates handling of security-related events + to optional closures defined in Config.groovy.
+
SecurityEventListener() - Constructor in SecurityEventListener +
+
SecurityFilterPosition - Enum in grails.plugin.springsecurity +
Stores the default order numbers of all Spring Security filters for use in configuration.
+
SecurityRequestHolder - Class in grails.plugin.springsecurity.web +
Uses a java.lang.ThreadLocal to store the current request and response.
+
SecurityRequestHolderFilter - Class in grails.plugin.springsecurity.web +
Stores the request and response in the SecurityRequestHolder.
+
SecurityRequestHolderFilter.1 - Class in grails.plugin.springsecurity.web +
+
SecurityRequestHolderFilter.1() - Constructor in SecurityRequestHolderFilter.1 +
+
SecurityRequestHolderFilter.2 - Class in grails.plugin.springsecurity.web +
+
SecurityRequestHolderFilter.2() - Constructor in SecurityRequestHolderFilter.2 +
+
SecurityRequestHolderFilter() - Constructor in SecurityRequestHolderFilter +
+
SecurityTagLib - Class in grails.plugin.springsecurity +
Security tags.
+
SecurityTagLib() - Constructor in SecurityTagLib +
+
sendRedirect(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.String) - Method in GrailsRedirectStrategy +
+
serverContextPath - Property in SecurityTagLib +
+
SERVLET_API_SUPPORT_FILTER - Field in SecurityFilterPosition +
SecurityContextHolderAwareRequestFilter
+
servletContext - Property in AnnotationFilterInvocationDefinition +
+
SESSION_MANAGEMENT_FILTER - Field in SecurityFilterPosition +
SessionManagementFilter
+
set(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) - Method in SecurityRequestHolder +
Set the current request and response.
+
setAjaxErrorPage(java.lang.String) - Method in AjaxAwareAccessDeniedHandler +
Dependency injection for the Ajax error page, e.g.
+
setAjaxLoginFormUrl(java.lang.String) - Method in AjaxAwareAuthenticationEntryPoint +
Dependency injection for the Ajax login form url, e.g.
+
setApplication(grails.core.GrailsApplication) - Method in SpringSecurityUtils +
Set at startup by plugin.
+
setConfigProperty(java.lang.String, java.lang.Object) - Method in ReflectionUtils +
+
setConfiguration(grails.config.Config) - Method in SecurityTagLib +
+
setErrorPage(java.lang.String) - Method in AjaxAwareAccessDeniedHandler +
Dependency injection for the error page, e.g.
+
setExceptionMappings(List<Map<String, ?>>) - Method in AjaxAwareAuthenticationFailureHandler +
Dependency injection for the exception -> url mappings; each map has an 'exception' key and a 'url' key, and + all are merged into one map, where each key is an exception name and each value is the url.
+
setExceptionMappingsList(List<Map<String, ?>>) - Method in AjaxAwareAuthenticationFailureHandler +
+
setIpRestrictions(List<Map<String, Object>>) - Method in IpAddressFilter +
Dependency injection for the ip/pattern restriction map.
+
setMessageSource(org.springframework.context.MessageSource) - Method in ClosureX509PrincipalExtractor +
Dependency injection for the message source.
+
setMessageSource(org.springframework.context.MessageSource) - Method in DefaultPostAuthenticationChecks +
+
setMessageSource(org.springframework.context.MessageSource) - Method in DefaultPreAuthenticationChecks +
+
setMethodParam(java.lang.String) - Method in HttpMethodOverrideDetector +
Set the parameter name to look for HTTP methods.
+
setRequestCache(org.springframework.security.web.savedrequest.RequestCache) - Method in AjaxAwareAuthenticationSuccessHandler +
+
setSecurityConfig(groovy.util.ConfigObject) - Method in ReflectionUtils +
+
setSecurityConfig(groovy.util.ConfigObject) - Method in SpringSecurityUtils +
For testing only.
+
SkipBootstrap - Trait in grails.plugin.springsecurity +
+
skipBootstrap - Property in SkipBootstrap +
+
SLASH - Field in AnnotationFilterInvocationDefinition +
+
source - Field in ChannelFilterInvocationSecurityMetadataSourceFactoryBean +
+
split(java.lang.String) - Method in AbstractFilterInvocationDefinition +
+
splitMap(List<Map<String, Object>>) - Method in ReflectionUtils +
+
SPRING_SECURITY_LAST_USERNAME_KEY - Field in SpringSecurityUtils +
+
SpringSecurityBeanFactoryPostProcessor - Class in grails.plugin.springsecurity +
Unregisters auto-config beans registered by Boot.
+
SpringSecurityBeanFactoryPostProcessor() - Constructor in SpringSecurityBeanFactoryPostProcessor +
+
SpringSecurityCoreGrailsPlugin - Class in grails.plugin.springsecurity +
Authors:
Burt Beckwith
+
SpringSecurityCoreGrailsPlugin() - Constructor in SpringSecurityCoreGrailsPlugin +
+
SpringSecurityService - Class in grails.plugin.springsecurity +
Utility methods.
+
springSecurityService - Property in LoginController +
Dependency injection for the springSecurityService.
+
springSecurityService - Property in SecurityTagLib +
Dependency injection for springSecurityService.
+
SpringSecurityService() - Constructor in SpringSecurityService +
+
SpringSecurityUtils - Class in grails.plugin.springsecurity +
Helper methods.
+
stopAtFirstMatch() - Method in AbstractFilterInvocationDefinition +
+
stopAtFirstMatch() - Method in InterceptUrlMapFilterInvocationDefinition +
+
storeLastUsername - Property in GrailsUsernamePasswordAuthenticationFilter +
Whether to store the last attempted username in the session.
+
storeMapping(java.lang.String, org.springframework.http.HttpMethod, Collection<ConfigAttribute>) - Method in AbstractFilterInvocationDefinition +
+
storeMapping(java.lang.String, java.lang.String, Class<?>, org.springframework.http.HttpMethod) - Method in AnnotationFilterInvocationDefinition +
+
stripContextPath(java.lang.String, javax.servlet.http.HttpServletRequest) - Method in AbstractFilterInvocationDefinition +
+
SUCCESS - Property in CommandLineHelper +
+
SUPPORTED - Field in ChannelFilterInvocationSecurityMetadataSourceFactoryBean +
+
supports(Class<?>) - Method in AbstractFilterInvocationDefinition +
+
supports(Class<?>) - Method in ClosureVoter +
+
supports(Class<?>) - Method in GrailsAnonymousAuthenticationProvider +
+
supports(Class<?>) - Method in NullAfterInvocationManager +
+
supports(Class<?>) - Method in NullAfterInvocationProvider +
+
supports(Class<?>) - Method in WebExpressionVoter +
+
SWITCH_USER_FILTER - Field in SecurityFilterPosition +
Switch user
+
switchedUserOriginalUsername - Property in SecurityTagLib +
Renders the username of the 'real' authentication when authenticated as another user via run-as.
+
+ + + +

T

+
+ +
title - Property in SpringSecurityCoreGrailsPlugin +
+
toString() - Method in GrailsSecurityFilterChain +
+
toString() - Method in WebExpressionConfigAttribute +
+
+ + + +

U

+
+ +
UpdateRequestContextHolderExceptionTranslationFilter - Class in grails.plugin.springsecurity.web +
Replaces the current GrailsWebRequest with one that delegates to the real current instance but uses the request and + response from the filter chain instead of the cached instances from earlier in the chain to ensure that controllers + and other classes that access the request from the thread-local RequestContextHolder use the correct instances.
+
UpdateRequestContextHolderExceptionTranslationFilter(org.springframework.security.web.AuthenticationEntryPoint, org.springframework.security.web.savedrequest.RequestCache) - Constructor in UpdateRequestContextHolderExceptionTranslationFilter +
+
updateRole(java.lang.Object, java.lang.Object) - Method in SpringSecurityService +
Update a role, and if Requestmap class is used to store roles, replace the new role + name in all Requestmap definitions that use it if the name was changed.
+
updateToken(java.lang.String, java.lang.String, java.util.Date) - Method in GormPersistentTokenRepository +
+
urlMappingsHolder - Field in AnnotationFilterInvocationDefinition +
+
urlMatcher - Field in AbstractFilterInvocationDefinition +
+
urlMatcher - Field in ChannelFilterInvocationSecurityMetadataSourceFactoryBean +
+
urlPathHelper - Field in AbstractFilterInvocationDefinition +
+
useForward - Property in AjaxAwareAccessDeniedHandler +
Dependency injection for whether to forward to render the denied page or redirect.
+
useHeaderCheckChannelSecurity - Property in GrailsRedirectStrategy +
Dependency injection for useHeaderCheckChannelSecurity.
+
useHeaderCheckChannelSecurity - Property in SecurityRequestHolderFilter +
+
USER_DETAILS - Field in GrailsAnonymousAuthenticationToken +
+
useRequestmaps() - Method in SpringSecurityService +
+
USERNAME - Field in GrailsAnonymousAuthenticationToken +
+
username - Property in SecurityTagLib +
Renders the user's username if logged in.
+
+ + + +

V

+
+ +
validate(org.springframework.security.web.FilterChainProxy) - Method in NullFilterChainValidator +
+
value() - Method in Authorities +
The property file key; the property value will be a comma-delimited list of role names.
+
value() - Method in Secured +
Defines the security configuration attributes (e.g.
+
valueOf(java.lang.String) - Method in SecurityConfigType +
+
valueOf(java.lang.String) - Method in SecurityFilterPosition +
+
values() - Method in SecurityConfigType +
+
values() - Method in SecurityFilterPosition +
+
visit(org.codehaus.groovy.ast.ASTNode, org.codehaus.groovy.control.SourceUnit) - Method in AuthoritiesTransformation +
+
vote(org.springframework.security.core.Authentication, org.springframework.security.web.FilterInvocation, Collection<ConfigAttribute>) - Method in ClosureVoter +
+
vote(org.springframework.security.core.Authentication, org.springframework.security.web.FilterInvocation, Collection<ConfigAttribute>) - Method in WebExpressionVoter +
+
voterNames - Property in SpringSecurityUtils +
Voter names.
+
+ + + +

W

+
+ +
WebExpressionConfigAttribute - Class in grails.plugin.springsecurity.web.access.expression +
Simple expression configuration attribute for use in web request authorizations. +
+
WebExpressionConfigAttribute(org.springframework.expression.Expression) - Constructor in WebExpressionConfigAttribute +
Constructor.
+
webExpressionHandler - Property in SecurityTagLib +
Dependency injection for webExpressionHandler.
+
WebExpressionVoter - Class in grails.plugin.springsecurity.web.access.expression +
Based on the class of the same name in Spring Security which uses the + package-default WebExpressionConfigAttribute.
+
WebExpressionVoter() - Constructor in WebExpressionVoter +
+
webInvocationPrivilegeEvaluator - Property in SecurityTagLib +
Dependency injection for webInvocationPrivilegeEvaluator.
+
wrapRequest(javax.servlet.http.HttpServletRequest) - Method in SecurityRequestHolderFilter +
If using header check channel security, look for the specified header (typically 'X-Forwarded-Proto') + and if found, return a request wrapper that returns the correct values for isSecure(), getScheme(), + and getServerPort().
+
+ + + +

X

+
+ +
X509_FILTER - Field in SecurityFilterPosition +
x509 certs
+
XML_HTTP_REQUEST - Field in SpringSecurityUtils +
+
+ + + +

Y

+
+ +
+ + + +

Z

+
+ +
+ + + +

_

+
+ +
+ + +
+ + +A + +B + +C + +D + +E + +F + +G + +H + +I + +J + +K + +L + +M + +N + +O + +P + +Q + +R + +S + +T + +U + +V + +W + +X + +Y + +Z + +_ + + + +
+ + + + + +
+ + + + diff --git a/6.0.2/groovydoc/index.html b/6.0.2/groovydoc/index.html new file mode 100644 index 000000000..abc3bfa32 --- /dev/null +++ b/6.0.2/groovydoc/index.html @@ -0,0 +1,90 @@ + + + + +Index (spring-security-core 6.0.2 API) + + + + + + + + + + + + + + <noscript> + <div>JavaScript is disabled on your browser.</div> + </noscript> + <h2>Frame Alert</h2> + <p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="overview-summary.html">Non-frame version</a>.</p> + + diff --git a/6.0.2/groovydoc/inherit.gif b/6.0.2/groovydoc/inherit.gif new file mode 100644 index 000000000..c814867a1 Binary files /dev/null and b/6.0.2/groovydoc/inherit.gif differ diff --git a/6.0.2/groovydoc/overview-frame.html b/6.0.2/groovydoc/overview-frame.html new file mode 100644 index 000000000..90d79b464 --- /dev/null +++ b/6.0.2/groovydoc/overview-frame.html @@ -0,0 +1,96 @@ + + + + +Overview (spring-security-core 6.0.2 API) + + + + + + + + + + + + + diff --git a/6.0.2/groovydoc/overview-summary.html b/6.0.2/groovydoc/overview-summary.html new file mode 100644 index 000000000..d5995f5d9 --- /dev/null +++ b/6.0.2/groovydoc/overview-summary.html @@ -0,0 +1,232 @@ + + + + + +Overview (spring-security-core 6.0.2 API) + + + + + + + + + + + +
+ + + + + +
+ + +
+

spring-security-core 6.0.2 API

+
+ +
+
+
+
+ +
+ + + + + diff --git a/6.0.2/groovydoc/package-list b/6.0.2/groovydoc/package-list new file mode 100644 index 000000000..feda906c6 --- /dev/null +++ b/6.0.2/groovydoc/package-list @@ -0,0 +1,18 @@ +grails.plugin.springsecurity +grails.plugin.springsecurity +grails.plugin.springsecurity.access +grails.plugin.springsecurity.access.intercept +grails.plugin.springsecurity.access.vote +grails.plugin.springsecurity.annotation +grails.plugin.springsecurity.authentication +grails.plugin.springsecurity.userdetails +grails.plugin.springsecurity.web +grails.plugin.springsecurity.web.access +grails.plugin.springsecurity.web.access.expression +grails.plugin.springsecurity.web.access.intercept +grails.plugin.springsecurity.web.authentication +grails.plugin.springsecurity.web.authentication.logout +grails.plugin.springsecurity.web.authentication.preauth.x509 +grails.plugin.springsecurity.web.authentication.rememberme +grails.plugin.springsecurity.web.authentication.switchuser +grails.plugin.springsecurity.web.filter diff --git a/6.0.2/groovydoc/stylesheet.css b/6.0.2/groovydoc/stylesheet.css new file mode 100644 index 000000000..06eb31a18 --- /dev/null +++ b/6.0.2/groovydoc/stylesheet.css @@ -0,0 +1,2306 @@ +@charset "UTF-8"; + +/*! normalize.css v2.1.0 | MIT License | git.io/normalize */ +article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { + display: block +} + +audio, canvas, video { + display: inline-block +} + +audio:not([controls]) { + display: none; + height: 0 +} + +[hidden] { + display: none +} + +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100% +} + +body { + margin: 0 +} + +a:focus { + outline: thin dotted +} + +a:active, a:hover { + outline: 0 +} + +h1 { + font-size: 2em; + margin: .67em 0 +} + +abbr[title] { + border-bottom: 1px dotted +} + +b, strong { + font-weight: bold +} + +dfn { + font-style: italic +} + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0 +} + +mark { + background: #ff0; + color: #000 +} + +code, kbd, pre, samp { + font-family: monospace, serif; + font-size: 1em +} + +pre { + white-space: pre-wrap +} + +q { + quotes: "C" "D" "8" "9" +} + +small { + font-size: 80% +} + +sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline +} + +sup { + top: -0.5em +} + +sub { + bottom: -0.25em +} + +img { + border: 0 +} + +svg:not(:root) { + overflow: hidden +} + +figure { + margin: 0 +} + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: .35em .625em .75em +} + +legend { + border: 0; + padding: 0 +} + +button, input, select, textarea { + font-family: inherit; + font-size: 100%; + margin: 0 +} + +button, input { + line-height: normal +} + +button, select { + text-transform: none +} + +button, html input[type="button"], input[type="reset"], input[type="submit"] { + -webkit-appearance: button; + cursor: pointer +} + +button[disabled], html input[disabled] { + cursor: default +} + +input[type="checkbox"], input[type="radio"] { + box-sizing: border-box; + padding: 0 +} + +input[type="search"] { + -webkit-appearance: textfield; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box +} + +input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none +} + +button::-moz-focus-inner, input::-moz-focus-inner { + border: 0; + padding: 0 +} + +textarea { + overflow: auto; + vertical-align: top +} + +table { + border-collapse: collapse; + border-spacing: 0 +} + +@-ms-viewport { + width: device-width +} + +@media screen and (max-width: 400px) { + @-ms-viewport { + width: 320px + } +} + +.hidden { + display: none !important; + visibility: hidden !important +} + +.visible-xs { + display: none !important +} + +tr.visible-xs { + display: none !important +} + +th.visible-xs, td.visible-xs { + display: none !important +} + +@media (max-width: 767px) { + .visible-xs { + display: block !important + } + + tr.visible-xs { + display: table-row !important + } + + th.visible-xs, td.visible-xs { + display: table-cell !important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-xs.visible-sm { + display: block !important + } + + tr.visible-xs.visible-sm { + display: table-row !important + } + + th.visible-xs.visible-sm, td.visible-xs.visible-sm { + display: table-cell !important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-xs.visible-md { + display: block !important + } + + tr.visible-xs.visible-md { + display: table-row !important + } + + th.visible-xs.visible-md, td.visible-xs.visible-md { + display: table-cell !important + } +} + +@media (min-width: 1200px) { + .visible-xs.visible-lg { + display: block !important + } + + tr.visible-xs.visible-lg { + display: table-row !important + } + + th.visible-xs.visible-lg, td.visible-xs.visible-lg { + display: table-cell !important + } +} + +.visible-sm { + display: none !important +} + +tr.visible-sm { + display: none !important +} + +th.visible-sm, td.visible-sm { + display: none !important +} + +@media (max-width: 767px) { + .visible-sm.visible-xs { + display: block !important + } + + tr.visible-sm.visible-xs { + display: table-row !important + } + + th.visible-sm.visible-xs, td.visible-sm.visible-xs { + display: table-cell !important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important + } + + tr.visible-sm { + display: table-row !important + } + + th.visible-sm, td.visible-sm { + display: table-cell !important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-sm.visible-md { + display: block !important + } + + tr.visible-sm.visible-md { + display: table-row !important + } + + th.visible-sm.visible-md, td.visible-sm.visible-md { + display: table-cell !important + } +} + +@media (min-width: 1200px) { + .visible-sm.visible-lg { + display: block !important + } + + tr.visible-sm.visible-lg { + display: table-row !important + } + + th.visible-sm.visible-lg, td.visible-sm.visible-lg { + display: table-cell !important + } +} + +.visible-md { + display: none !important +} + +tr.visible-md { + display: none !important +} + +th.visible-md, td.visible-md { + display: none !important +} + +@media (max-width: 767px) { + .visible-md.visible-xs { + display: block !important + } + + tr.visible-md.visible-xs { + display: table-row !important + } + + th.visible-md.visible-xs, td.visible-md.visible-xs { + display: table-cell !important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-md.visible-sm { + display: block !important + } + + tr.visible-md.visible-sm { + display: table-row !important + } + + th.visible-md.visible-sm, td.visible-md.visible-sm { + display: table-cell !important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important + } + + tr.visible-md { + display: table-row !important + } + + th.visible-md, td.visible-md { + display: table-cell !important + } +} + +@media (min-width: 1200px) { + .visible-md.visible-lg { + display: block !important + } + + tr.visible-md.visible-lg { + display: table-row !important + } + + th.visible-md.visible-lg, td.visible-md.visible-lg { + display: table-cell !important + } +} + +.visible-lg { + display: none !important +} + +tr.visible-lg { + display: none !important +} + +th.visible-lg, td.visible-lg { + display: none !important +} + +@media (max-width: 767px) { + .visible-lg.visible-xs { + display: block !important + } + + tr.visible-lg.visible-xs { + display: table-row !important + } + + th.visible-lg.visible-xs, td.visible-lg.visible-xs { + display: table-cell !important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-lg.visible-sm { + display: block !important + } + + tr.visible-lg.visible-sm { + display: table-row !important + } + + th.visible-lg.visible-sm, td.visible-lg.visible-sm { + display: table-cell !important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-lg.visible-md { + display: block !important + } + + tr.visible-lg.visible-md { + display: table-row !important + } + + th.visible-lg.visible-md, td.visible-lg.visible-md { + display: table-cell !important + } +} + +@media (min-width: 1200px) { + .visible-lg { + display: block !important + } + + tr.visible-lg { + display: table-row !important + } + + th.visible-lg, td.visible-lg { + display: table-cell !important + } +} + +.hidden-xs { + display: block !important +} + +tr.hidden-xs { + display: table-row !important +} + +th.hidden-xs, td.hidden-xs { + display: table-cell !important +} + +@media (max-width: 767px) { + .hidden-xs { + display: none !important + } + + tr.hidden-xs { + display: none !important + } + + th.hidden-xs, td.hidden-xs { + display: none !important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-xs.hidden-sm { + display: none !important + } + + tr.hidden-xs.hidden-sm { + display: none !important + } + + th.hidden-xs.hidden-sm, td.hidden-xs.hidden-sm { + display: none !important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-xs.hidden-md { + display: none !important + } + + tr.hidden-xs.hidden-md { + display: none !important + } + + th.hidden-xs.hidden-md, td.hidden-xs.hidden-md { + display: none !important + } +} + +@media (min-width: 1200px) { + .hidden-xs.hidden-lg { + display: none !important + } + + tr.hidden-xs.hidden-lg { + display: none !important + } + + th.hidden-xs.hidden-lg, td.hidden-xs.hidden-lg { + display: none !important + } +} + +.hidden-sm { + display: block !important +} + +tr.hidden-sm { + display: table-row !important +} + +th.hidden-sm, td.hidden-sm { + display: table-cell !important +} + +@media (max-width: 767px) { + .hidden-sm.hidden-xs { + display: none !important + } + + tr.hidden-sm.hidden-xs { + display: none !important + } + + th.hidden-sm.hidden-xs, td.hidden-sm.hidden-xs { + display: none !important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important + } + + tr.hidden-sm { + display: none !important + } + + th.hidden-sm, td.hidden-sm { + display: none !important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-sm.hidden-md { + display: none !important + } + + tr.hidden-sm.hidden-md { + display: none !important + } + + th.hidden-sm.hidden-md, td.hidden-sm.hidden-md { + display: none !important + } +} + +@media (min-width: 1200px) { + .hidden-sm.hidden-lg { + display: none !important + } + + tr.hidden-sm.hidden-lg { + display: none !important + } + + th.hidden-sm.hidden-lg, td.hidden-sm.hidden-lg { + display: none !important + } +} + +.hidden-md { + display: block !important +} + +tr.hidden-md { + display: table-row !important +} + +th.hidden-md, td.hidden-md { + display: table-cell !important +} + +@media (max-width: 767px) { + .hidden-md.hidden-xs { + display: none !important + } + + tr.hidden-md.hidden-xs { + display: none !important + } + + th.hidden-md.hidden-xs, td.hidden-md.hidden-xs { + display: none !important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-md.hidden-sm { + display: none !important + } + + tr.hidden-md.hidden-sm { + display: none !important + } + + th.hidden-md.hidden-sm, td.hidden-md.hidden-sm { + display: none !important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important + } + + tr.hidden-md { + display: none !important + } + + th.hidden-md, td.hidden-md { + display: none !important + } +} + +@media (min-width: 1200px) { + .hidden-md.hidden-lg { + display: none !important + } + + tr.hidden-md.hidden-lg { + display: none !important + } + + th.hidden-md.hidden-lg, td.hidden-md.hidden-lg { + display: none !important + } +} + +.hidden-lg { + display: block !important +} + +tr.hidden-lg { + display: table-row !important +} + +th.hidden-lg, td.hidden-lg { + display: table-cell !important +} + +@media (max-width: 767px) { + .hidden-lg.hidden-xs { + display: none !important + } + + tr.hidden-lg.hidden-xs { + display: none !important + } + + th.hidden-lg.hidden-xs, td.hidden-lg.hidden-xs { + display: none !important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-lg.hidden-sm { + display: none !important + } + + tr.hidden-lg.hidden-sm { + display: none !important + } + + th.hidden-lg.hidden-sm, td.hidden-lg.hidden-sm { + display: none !important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-lg.hidden-md { + display: none !important + } + + tr.hidden-lg.hidden-md { + display: none !important + } + + th.hidden-lg.hidden-md, td.hidden-lg.hidden-md { + display: none !important + } +} + +@media (min-width: 1200px) { + .hidden-lg { + display: none !important + } + + tr.hidden-lg { + display: none !important + } + + th.hidden-lg, td.hidden-lg { + display: none !important + } +} + +.visible-print { + display: none !important +} + +tr.visible-print { + display: none !important +} + +th.visible-print, td.visible-print { + display: none !important +} + +@media print { + .visible-print { + display: block !important + } + + tr.visible-print { + display: table-row !important + } + + th.visible-print, td.visible-print { + display: table-cell !important + } + + .hidden-print { + display: none !important + } + + tr.hidden-print { + display: none !important + } + + th.hidden-print, td.hidden-print { + display: none !important + } +} + +.container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px +} + +.container:before, .container:after { + content: " "; + display: table +} + +.container:after { + clear: both +} + +.row-fluid { + margin-left: -15px; + margin-right: -15px +} + +.row-fluid:before, .row-fluid:after { + content: " "; + display: table +} + +.row-fluid:after { + clear: both +} + +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + position: relative; + min-height: 1px; + padding-left: 15px; + padding-right: 15px +} + +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11 { + float: left +} + +.col-xs-1 { + width: 8.333333333333332% +} + +.col-xs-2 { + width: 16.666666666666664% +} + +.col-xs-3 { + width: 25% +} + +.col-xs-4 { + width: 33.33333333333333% +} + +.col-xs-5 { + width: 41.66666666666667% +} + +.col-xs-6 { + width: 50% +} + +.col-xs-7 { + width: 58.333333333333336% +} + +.col-xs-8 { + width: 66.66666666666666% +} + +.col-xs-9 { + width: 75% +} + +.col-xs-10 { + width: 83.33333333333334% +} + +.col-xs-11 { + width: 91.66666666666666% +} + +.col-xs-12 { + width: 100% +} + +@media (min-width: 768px) { + .container { + max-width: 750px + } + + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11 { + float: left + } + + .col-sm-1 { + width: 8.333333333333332% + } + + .col-sm-2 { + width: 16.666666666666664% + } + + .col-sm-3 { + width: 25% + } + + .col-sm-4 { + width: 33.33333333333333% + } + + .col-sm-5 { + width: 41.66666666666667% + } + + .col-sm-6 { + width: 50% + } + + .col-sm-7 { + width: 58.333333333333336% + } + + .col-sm-8 { + width: 66.66666666666666% + } + + .col-sm-9 { + width: 75% + } + + .col-sm-10 { + width: 83.33333333333334% + } + + .col-sm-11 { + width: 91.66666666666666% + } + + .col-sm-12 { + width: 100% + } + + .col-sm-push-1 { + left: 8.333333333333332% + } + + .col-sm-push-2 { + left: 16.666666666666664% + } + + .col-sm-push-3 { + left: 25% + } + + .col-sm-push-4 { + left: 33.33333333333333% + } + + .col-sm-push-5 { + left: 41.66666666666667% + } + + .col-sm-push-6 { + left: 50% + } + + .col-sm-push-7 { + left: 58.333333333333336% + } + + .col-sm-push-8 { + left: 66.66666666666666% + } + + .col-sm-push-9 { + left: 75% + } + + .col-sm-push-10 { + left: 83.33333333333334% + } + + .col-sm-push-11 { + left: 91.66666666666666% + } + + .col-sm-pull-1 { + right: 8.333333333333332% + } + + .col-sm-pull-2 { + right: 16.666666666666664% + } + + .col-sm-pull-3 { + right: 25% + } + + .col-sm-pull-4 { + right: 33.33333333333333% + } + + .col-sm-pull-5 { + right: 41.66666666666667% + } + + .col-sm-pull-6 { + right: 50% + } + + .col-sm-pull-7 { + right: 58.333333333333336% + } + + .col-sm-pull-8 { + right: 66.66666666666666% + } + + .col-sm-pull-9 { + right: 75% + } + + .col-sm-pull-10 { + right: 83.33333333333334% + } + + .col-sm-pull-11 { + right: 91.66666666666666% + } + + .col-sm-offset-1 { + margin-left: 8.333333333333332% + } + + .col-sm-offset-2 { + margin-left: 16.666666666666664% + } + + .col-sm-offset-3 { + margin-left: 25% + } + + .col-sm-offset-4 { + margin-left: 33.33333333333333% + } + + .col-sm-offset-5 { + margin-left: 41.66666666666667% + } + + .col-sm-offset-6 { + margin-left: 50% + } + + .col-sm-offset-7 { + margin-left: 58.333333333333336% + } + + .col-sm-offset-8 { + margin-left: 66.66666666666666% + } + + .col-sm-offset-9 { + margin-left: 75% + } + + .col-sm-offset-10 { + margin-left: 83.33333333333334% + } + + .col-sm-offset-11 { + margin-left: 91.66666666666666% + } +} + +@media (min-width: 992px) { + .container { + max-width: 970px + } + + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11 { + float: left + } + + .col-md-1 { + width: 8.333333333333332% + } + + .col-md-2 { + width: 16.666666666666664% + } + + .col-md-3 { + width: 25% + } + + .col-md-4 { + width: 33.33333333333333% + } + + .col-md-5 { + width: 41.66666666666667% + } + + .col-md-6 { + width: 50% + } + + .col-md-7 { + width: 58.333333333333336% + } + + .col-md-8 { + width: 66.66666666666666% + } + + .col-md-9 { + width: 75% + } + + .col-md-10 { + width: 83.33333333333334% + } + + .col-md-11 { + width: 91.66666666666666% + } + + .col-md-12 { + width: 100% + } + + .col-md-push-0 { + left: auto + } + + .col-md-push-1 { + left: 8.333333333333332% + } + + .col-md-push-2 { + left: 16.666666666666664% + } + + .col-md-push-3 { + left: 25% + } + + .col-md-push-4 { + left: 33.33333333333333% + } + + .col-md-push-5 { + left: 41.66666666666667% + } + + .col-md-push-6 { + left: 50% + } + + .col-md-push-7 { + left: 58.333333333333336% + } + + .col-md-push-8 { + left: 66.66666666666666% + } + + .col-md-push-9 { + left: 75% + } + + .col-md-push-10 { + left: 83.33333333333334% + } + + .col-md-push-11 { + left: 91.66666666666666% + } + + .col-md-pull-0 { + right: auto + } + + .col-md-pull-1 { + right: 8.333333333333332% + } + + .col-md-pull-2 { + right: 16.666666666666664% + } + + .col-md-pull-3 { + right: 25% + } + + .col-md-pull-4 { + right: 33.33333333333333% + } + + .col-md-pull-5 { + right: 41.66666666666667% + } + + .col-md-pull-6 { + right: 50% + } + + .col-md-pull-7 { + right: 58.333333333333336% + } + + .col-md-pull-8 { + right: 66.66666666666666% + } + + .col-md-pull-9 { + right: 75% + } + + .col-md-pull-10 { + right: 83.33333333333334% + } + + .col-md-pull-11 { + right: 91.66666666666666% + } + + .col-md-offset-0 { + margin-left: 0 + } + + .col-md-offset-1 { + margin-left: 8.333333333333332% + } + + .col-md-offset-2 { + margin-left: 16.666666666666664% + } + + .col-md-offset-3 { + margin-left: 25% + } + + .col-md-offset-4 { + margin-left: 33.33333333333333% + } + + .col-md-offset-5 { + margin-left: 41.66666666666667% + } + + .col-md-offset-6 { + margin-left: 50% + } + + .col-md-offset-7 { + margin-left: 58.333333333333336% + } + + .col-md-offset-8 { + margin-left: 66.66666666666666% + } + + .col-md-offset-9 { + margin-left: 75% + } + + .col-md-offset-10 { + margin-left: 83.33333333333334% + } + + .col-md-offset-11 { + margin-left: 91.66666666666666% + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1170px + } + + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11 { + float: left + } + + .col-lg-1 { + width: 8.333333333333332% + } + + .col-lg-2 { + width: 16.666666666666664% + } + + .col-lg-3 { + width: 25% + } + + .col-lg-4 { + width: 33.33333333333333% + } + + .col-lg-5 { + width: 41.66666666666667% + } + + .col-lg-6 { + width: 50% + } + + .col-lg-7 { + width: 58.333333333333336% + } + + .col-lg-8 { + width: 66.66666666666666% + } + + .col-lg-9 { + width: 75% + } + + .col-lg-10 { + width: 83.33333333333334% + } + + .col-lg-11 { + width: 91.66666666666666% + } + + .col-lg-12 { + width: 100% + } + + .col-lg-push-0 { + left: auto + } + + .col-lg-push-1 { + left: 8.333333333333332% + } + + .col-lg-push-2 { + left: 16.666666666666664% + } + + .col-lg-push-3 { + left: 25% + } + + .col-lg-push-4 { + left: 33.33333333333333% + } + + .col-lg-push-5 { + left: 41.66666666666667% + } + + .col-lg-push-6 { + left: 50% + } + + .col-lg-push-7 { + left: 58.333333333333336% + } + + .col-lg-push-8 { + left: 66.66666666666666% + } + + .col-lg-push-9 { + left: 75% + } + + .col-lg-push-10 { + left: 83.33333333333334% + } + + .col-lg-push-11 { + left: 91.66666666666666% + } + + .col-lg-pull-0 { + right: auto + } + + .col-lg-pull-1 { + right: 8.333333333333332% + } + + .col-lg-pull-2 { + right: 16.666666666666664% + } + + .col-lg-pull-3 { + right: 25% + } + + .col-lg-pull-4 { + right: 33.33333333333333% + } + + .col-lg-pull-5 { + right: 41.66666666666667% + } + + .col-lg-pull-6 { + right: 50% + } + + .col-lg-pull-7 { + right: 58.333333333333336% + } + + .col-lg-pull-8 { + right: 66.66666666666666% + } + + .col-lg-pull-9 { + right: 75% + } + + .col-lg-pull-10 { + right: 83.33333333333334% + } + + .col-lg-pull-11 { + right: 91.66666666666666% + } + + .col-lg-offset-0 { + margin-left: 0 + } + + .col-lg-offset-1 { + margin-left: 8.333333333333332% + } + + .col-lg-offset-2 { + margin-left: 16.666666666666664% + } + + .col-lg-offset-3 { + margin-left: 25% + } + + .col-lg-offset-4 { + margin-left: 33.33333333333333% + } + + .col-lg-offset-5 { + margin-left: 41.66666666666667% + } + + .col-lg-offset-6 { + margin-left: 50% + } + + .col-lg-offset-7 { + margin-left: 58.333333333333336% + } + + .col-lg-offset-8 { + margin-left: 66.66666666666666% + } + + .col-lg-offset-9 { + margin-left: 75% + } + + .col-lg-offset-10 { + margin-left: 83.33333333333334% + } + + .col-lg-offset-11 { + margin-left: 91.66666666666666% + } +} + +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.428571429; + text-align: center; + vertical-align: middle; + cursor: pointer; + border: 1px solid transparent; + border-radius: 0; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px +} + +.btn:hover, .btn:focus { + color: #333; + text-decoration: none +} + +.btn:active, .btn.active { + outline: 0; + background-image: none +} + +.btn.disabled, .btn[disabled], fieldset[disabled] .btn { + cursor: not-allowed; + pointer-events: none; + opacity: .65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none +} + +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc +} + +.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default { + color: #333; + background-color: #ebebeb; + border-color: #adadad +} + +.btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default { + background-image: none +} + +.btn-default.disabled, .btn-default[disabled], fieldset[disabled] .btn-default, .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, .btn-default.disabled:active, .btn-default[disabled]:active, fieldset[disabled] .btn-default:active, .btn-default.disabled.active, .btn-default[disabled].active, fieldset[disabled] .btn-default.active { + background-color: #fff; + border-color: #ccc +} + +.btn-primary { + color: #fff; + background-color: #428bca; + border-color: #357ebd +} + +.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary { + color: #fff; + background-color: #3276b1; + border-color: #285e8e +} + +.btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary { + background-image: none +} + +.btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active { + background-color: #428bca; + border-color: #357ebd +} + +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236 +} + +.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ed9c28; + border-color: #d58512 +} + +.btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning { + background-image: none +} + +.btn-warning.disabled, .btn-warning[disabled], fieldset[disabled] .btn-warning, .btn-warning.disabled:hover, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, .btn-warning.disabled:active, .btn-warning[disabled]:active, fieldset[disabled] .btn-warning:active, .btn-warning.disabled.active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236 +} + +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a +} + +.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger { + color: #fff; + background-color: #d2322d; + border-color: #ac2925 +} + +.btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger { + background-image: none +} + +.btn-danger.disabled, .btn-danger[disabled], fieldset[disabled] .btn-danger, .btn-danger.disabled:hover, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, .btn-danger.disabled:active, .btn-danger[disabled]:active, fieldset[disabled] .btn-danger:active, .btn-danger.disabled.active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a +} + +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c +} + +.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success { + color: #fff; + background-color: #47a447; + border-color: #398439 +} + +.btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success { + background-image: none +} + +.btn-success.disabled, .btn-success[disabled], fieldset[disabled] .btn-success, .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled:active, .btn-success[disabled]:active, fieldset[disabled] .btn-success:active, .btn-success.disabled.active, .btn-success[disabled].active, fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c +} + +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da +} + +.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info { + color: #fff; + background-color: #39b3d7; + border-color: #269abc +} + +.btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info { + background-image: none +} + +.btn-info.disabled, .btn-info[disabled], fieldset[disabled] .btn-info, .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, .btn-info.disabled:active, .btn-info[disabled]:active, fieldset[disabled] .btn-info:active, .btn-info.disabled.active, .btn-info[disabled].active, fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da +} + +.btn-link { + color: #428bca; + font-weight: normal; + cursor: pointer; + border-radius: 0 +} + +.btn-link, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none +} + +.btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active { + border-color: transparent +} + +.btn-link:hover, .btn-link:focus { + color: #2a6496; + text-decoration: underline; + background-color: transparent +} + +.btn-link[disabled]:hover, fieldset[disabled] .btn-link:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:focus { + color: #999; + text-decoration: none +} + +.btn-lg { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px +} + +.btn-sm, .btn-xs { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px +} + +.btn-xs { + padding: 1px 5px +} + +.btn-block { + display: block; + width: 100%; + padding-left: 0; + padding-right: 0 +} + +.btn-block + .btn-block { + margin-top: 5px +} + +input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block { + width: 100% +} + +.btn-default .caret { + border-top-color: #333 +} + +.btn-primary .caret, .btn-success .caret, .btn-warning .caret, .btn-danger .caret, .btn-info .caret { + border-top-color: #fff +} + +.dropup .btn-default .caret { + border-bottom-color: #333 +} + +.dropup .btn-primary .caret, .dropup .btn-success .caret, .dropup .btn-warning .caret, .dropup .btn-danger .caret, .dropup .btn-info .caret { + border-bottom-color: #fff +} + +.btn-group, .btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle +} + +.btn-group > .btn, .btn-group-vertical > .btn { + position: relative; + float: left +} + +.btn-group > .btn:hover, .btn-group-vertical > .btn:hover, .btn-group > .btn:focus, .btn-group-vertical > .btn:focus, .btn-group > .btn:active, .btn-group-vertical > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn.active { + z-index: 2 +} + +.btn-group > .btn:focus, .btn-group-vertical > .btn:focus { + outline: 0 +} + +.btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group { + margin-left: -1px +} + +.btn-toolbar:before, .btn-toolbar:after { + content: " "; + display: table +} + +.btn-toolbar:after { + clear: both +} + +.btn-toolbar .btn-group { + float: left +} + +.btn-toolbar > .btn + .btn, .btn-toolbar > .btn-group + .btn, .btn-toolbar > .btn + .btn-group, .btn-toolbar > .btn-group + .btn-group { + margin-left: 5px +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0 +} + +.btn-group > .btn:first-child { + margin-left: 0 +} + +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-top-right-radius: 0 +} + +.btn-group > .btn:last-child:not(:first-child), .btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0 +} + +.btn-group > .btn-group { + float: left +} + +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0 +} + +.btn-group > .btn-group:first-child > .btn:last-child, .btn-group > .btn-group:first-child > .dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0 +} + +.btn-group > .btn-group:last-child > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0 +} + +.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { + outline: 0 +} + +.btn-group-xs > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; + padding: 1px 5px +} + +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px +} + +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px +} + +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px +} + +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px +} + +.btn-group.open .dropdown-toggle { + background: #f2f2f2 +} + +.btn .caret { + margin-left: 0 +} + +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0 +} + +.dropup .btn-lg .caret { + border-width: 0 5px 5px +} + +.btn-group-vertical > .btn, .btn-group-vertical > .btn-group { + display: block; + float: none; + width: 100%; + max-width: 100% +} + +.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after { + content: " "; + display: table +} + +.btn-group-vertical > .btn-group:after { + clear: both +} + +.btn-group-vertical > .btn-group > .btn { + float: none +} + +.btn-group-vertical > .btn + .btn, .btn-group-vertical > .btn + .btn-group, .btn-group-vertical > .btn-group + .btn, .btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0 +} + +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0 +} + +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-bottom-left-radius: 0; + border-top-right-radius: 0; + border-top-left-radius: 0 +} + +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0 +} + +.btn-group-vertical > .btn-group:first-child > .btn:last-child, .btn-group-vertical > .btn-group:first-child > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.btn-group-vertical > .btn-group:last-child > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0 +} + +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate +} + +.btn-group-justified .btn { + float: none; + display: table-cell; + width: 1% +} + +[data-toggle="buttons"] > .btn > input[type="radio"], [data-toggle="buttons"] > .btn > input[type="checkbox"] { + display: none +} + +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid #000; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + border-bottom: 0 dotted; + content: "" +} + +.dropdown { + position: relative +} + +.dropdown-toggle:focus { + outline: 0 +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 14px; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0; + background-clip: padding-box +} + +.dropdown-menu.pull-right { + right: 0; + left: auto +} + +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5 +} + +.dropdown-menu > li > a { + font-size: 14px; + text-decoration: none; + display: block; + padding: 5px 20px; + clear: both; + font-weight: normal; + line-height: 1.428571429; + color: #333; + white-space: nowrap +} + +.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { + text-decoration: none; + color: #fff; + background-color: #428bca +} + +.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + outline: 0; + background-color: #428bca +} + +.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { + color: #999 +} + +.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + cursor: not-allowed +} + +.open > .dropdown-menu { + display: block +} + +.open > a { + outline: 0 +} + +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.428571429; + color: #999 +} + +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: 990 +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto +} + +.dropup .caret, .navbar-fixed-bottom .dropdown .caret { + border-top: 0 dotted; + border-bottom: 4px solid #000; + content: "" +} + +.dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px +} + +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto + } +} + +body, html { + font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; + margin: 0; + background: #ededed; + color: #343437; + line-height: 2em; + font-weight: 300; + font-size: .95em +} + +h1 { + font-size: 2.5em; + margin: .8em 0 +} + +body.center { + padding: 0 30px; + background: #FFF; + font-size: 1em +} + +ul li { + list-style-type: disc +} + +a { + color: #4290ad; + text-decoration: none; + font-weight: normal +} + +a:hover { + text-decoration: underline +} + +h1, h2, h3 { + font-weight: 300; + line-height: 1.2em +} + +.topNav, .bottomNav { + background: #f2f2f2; + margin: 0 -30px; + margin-bottom: 20px +} + +.topNav:before, .bottomNav:before, .topNav:after, .bottomNav:after { + content: " "; + display: table +} + +.topNav:after, .bottomNav:after { + clear: both +} + +.topNav ul.navList, .bottomNav ul.navList { + padding: 10px 20px; + margin: 0; + list-style-type: none +} + +.topNav ul.navList li, .bottomNav ul.navList li { + display: inline; + padding: 0 10px +} + +.topNav ul.navList li.navBarCell1Rev, .bottomNav ul.navList li.navBarCell1Rev { + font-weight: bold +} + +.bottomNav { + margin-top: 30px; + margin-bottom: 0 +} + +.aboutLanguage { + color: #BBB; + background: white; + text-align: center; + padding: 20px 0 +} + +.subNav { + padding-bottom: 10px; + margin-bottom: 10px; + border-bottom: 1px solid #EEE +} + +.subNav:before, .subNav:after { + content: " "; + display: table +} + +.subNav:after { + clear: both +} + +.subNav div:before, .subNav div:after { + content: " "; + display: table +} + +.subNav div:after { + clear: both +} + +.subNav ul.navList, .subNav ul { + font-size: .9em; + margin: 0; + padding: 00; + float: left; + list-style-type: none +} + +.subNav ul.navList li, .subNav ul li { + padding: 0 5px; + display: inline +} + +table.overviewSummary, .contentContainer ul li table { + width: 100%; + margin: 20px 0 +} + +table.overviewSummary caption, .contentContainer ul li table caption { + text-align: left; + font-weight: 100; + font-size: 1em; + float: left; + padding: 0 10px; + margin-top: 10px; + background: #db4800; + color: white +} + +table.overviewSummary tr th, .contentContainer ul li table tr th { + padding: 10px; + font-weight: bold; + font-size: 1em; + text-align: left +} + +table.overviewSummary tr td, .contentContainer ul li table tr td { + vertical-align: top; + font-size: .9em; + padding: 5px 10px; + border-top: 1px solid #EEE +} + +table.overviewSummary tbody > tr:nth-child(odd) > td, .contentContainer ul li table tbody > tr:nth-child(odd) > td { + background-color: #f9f9f9 +} + +body.left { + padding-top: 10px +} + +body.left h1, body.left h2 { + display: inline; + text-align: left; + font-weight: 100; + font-size: 1em; + margin: 0 10px; + padding: 3px 10px; + margin-top: 10px; + background: #db4800; + color: white; + line-height: 40px +} + +body.left .indexHeader { + margin: 0; + padding: 0 15px; + font-size: .9em +} + +body.left ul { + list-style-type: none; + margin: 0; + padding: 0 +} + +body.left ul li { + margin: 0; + padding: 0 +} + +body.left ul li a { + display: block; + padding: 0 15px; + text-decoration: none +} + +body.left ul li a:hover { + text-decoration: underline +} + +.contentContainer .header ul, .contentContainer ul.blockList { + padding: 0 +} + +.contentContainer .header ul > li, .contentContainer ul.blockList > li { + list-style-type: none +} + +.contentContainer ul.inheritance { + margin-left: 0; + padding-left: 0 +} + +.contentContainer ul.inheritance li { + list-style-type: none +} + +.contentContainer ul.inheritance ul.inheritance { + padding-left: 20px +} + +.contentContainer hr { + border: 0 none; + border-top: 1px solid #EEE; + margin-top: 30px; + margin-botom: 0 +} + +ul.blockList ul.blockList, ul.blockList ul.blockListLast { + border: 1px solid #EEE; + margin: 20px 0; + padding: 0 20px +} + +ul.blockList ul.blockList h4, ul.blockList ul.blockListLast h4, ul.blockList ul.blockList h3, ul.blockList ul.blockListLast h3 { + font-size: 1em; + font-weight: bold; + line-height: 2em; + text-indent: 10px; + border-bottom: 1px solid #EEE; + margin: 0 -20px; + padding: 5px 0; + background: #f2f2f2 +} + +ul.blockList ul.blockList li, ul.blockList ul.blockListLast li { + list-style-type: none +} + +ul.horizontal { + list-style-type: none; + padding: 0; + margin: 0; + font-size: .9em +} + +ul.horizontal li { + display: inline +} + +span.strong { + font-weight: bold +} + +a span.strong { + font-weight: normal +} \ No newline at end of file diff --git a/6.0.2/index.html b/6.0.2/index.html new file mode 100644 index 000000000..0c3159ac9 --- /dev/null +++ b/6.0.2/index.html @@ -0,0 +1,7188 @@ + + + + + + + + + +Spring Security Core Plugin - Reference Documentation + + + + + + + +
+
+

1. Introduction to the Spring Security Plugin

+
+
+

The Spring Security plugin simplifies the integration of Spring Security into Grails applications. The plugin provides sensible defaults with many configuration options for customization. Nearly everything is configurable or replaceable in the plugin and in Spring Security itself, which makes extensive use of interfaces.

+
+
+

This guide documents configuration defaults and describes how to configure and extend the Spring Security plugin for Grails applications.

+
+
+

1.1. Installation

+
+

1.1.1. Prerequisites

+
+

Ensure you have the following set up:

+
+
+
    +
  • +

    A Grails project

    +
  • +
  • +

    A working internet connection

    +
  • +
+
+
+
+

1.1.2. Installation Steps

+
+
    +
  1. +

    Open your Grails project.

    +
  2. +
  3. +

    Locate your build.gradle file in the root directory of your project.

    +
  4. +
  5. +

    Add the Spring Security Core Plugin dependency to the dependencies section in your build.gradle:

    +
    +
    +
    dependencies {
    +    // ... other dependencies
    +    implementation 'org.grails.plugins:spring-security-core:6.0.2'
    +}
    +
    +
    +
  6. +
  7. +

    Save the build.gradle file.

    +
  8. +
  9. +

    Open a terminal or command prompt.

    +
  10. +
  11. +

    Navigate to your project’s root directory using the cd command.

    +
  12. +
  13. +

    Run the following Gradle command to update your project’s dependencies:

    +
    +
    +
    ./gradlew clean build
    +
    +
    +
  14. +
  15. +

    The Spring Security Core Plugin 6.0.0 is now installed and integrated into your Grails project.

    +
  16. +
  17. +

    You can start using the plugin’s features and commands in your application.

    +
  18. +
  19. +

    Run the s2-quickstart script to generate domain classes and add the initial configuration settings in application.groovy:

    +
    +
    +
    ./gradlew runCommand "-Pargs==s2-quickstart com.yourapp User Role"
    +
    +
    +
  20. +
+
+
+
+

1.1.3. Verifying Installation

+
+

To verify that the plugin has been successfully installed, you can run a simple test:

+
+
+
    +
  1. +

    In your Grails project, create a new controller or use an existing one.

    +
  2. +
  3. +

    Add a secure annotation, such as @Secured(['ROLE_USER']), to a method in your controller.

    +
  4. +
  5. +

    Run your Grails application using the command:

    +
    +
    +
    ./gradlew bootRun
    +
    +
    +
  6. +
  7. +

    Access the URL associated with the method you secured. If the plugin is correctly installed, it should enforce the security constraint you defined.

    +
  8. +
+
+
+
+
+

1.2. Configuration and Customization

+
+

The Spring Security plugin’s configuration is primarily managed within the grails-app/conf/application.groovy file, although an alternative is to house plugin configuration within application.yml. Default values are stored in the grails-app/conf/DefaultSecurityConfig.groovy file, with additional application-specific settings appended to application.groovy (or application.yml). This configuration structure involves merging default and custom values, giving precedence to application-specific settings.

+
+
+

1.2.1. Environment-Specific Configuration

+
+

This configuration approach accommodates environment-specific needs. For instance, during development, you might require less restrictive security rules compared to a production environment. To handle environment-specific parameters, utilize the environments block.

+
+
+
+

1.2.2. Property Prefix and Overrides

+
+

To distinguish these configuration properties from others in Grails or from different plugins, all the plugin-specific configuration properties begin with grails.plugin.springsecurity. When overriding these properties, ensure to use the grails.plugin.springsecurity prefix. For example:

+
+
+
+
grails.plugin.springsecurity.password.algorithm = 'bcrypt'
+
+
+
+
+

1.2.3. Integration with CXF Grails Plugin

+
+

If your application incorporates the CXF Grails plugin, it’s crucial to arrange the dependencies correctly. Place the CXF dependency above the Spring Security plugin within the dependencies block, as shown below:

+
+
+
+
dependencies {
+    implementation 'org.grails.plugins:cxf:3.1.1'
+    // CXF above security.
+    implementation 'org.grails.plugins:spring-security-core:6.0.2'
+}
+
+
+
+
+
+

1.3. Quick Start Guide

+
+

Getting started with the plugin is simple and efficient. Follow these steps to enhance the security of your Grails application:

+
+
+
Step 1: Install the Plugin
+

Begin by installing the Spring Security plugin into your Grails project. Add the following dependency to your build.gradle:

+
+
+
+
implementation 'org.grails.plugins:spring-security-core:6.0.2'
+
+
+
+
Step 2: Run the Initialization Script
+

After installation, execute the s2-quickstart initialization script. This sets up essential classes and configurations required for the plugin’s functionality. In your terminal, run:

+
+
+
+
./gradlew runCommand -Pargs="s2-quickstart com.yourapp User Role"
+
+
+
+

1.3.1. Plugin Configuration and Setup

+
+

The Spring Security plugin streamlines configuration and setup through a combination of steps:

+
+
+
    +
  1. +

    Programmatic Servlet API Configuration:

    +
    +
    +
    Unlike earlier versions that utilized `web.xml`, the plugin now registers its servlet API configuration, including the Spring Security filter chain, programmatically.
    +
    +
    +
  2. +
  3. +

    Configure Spring Beans:

    +
    +
    +
    The plugin configures Spring beans within the application context to implement various functionality components. Dependency management automatically handles the selection of appropriate jar files.
    +
    +
    +
  4. +
+
+
+

By following these steps, your Grails application will be ready to leverage the Spring Security plugin for enhanced security. While in-depth knowledge of Spring Security isn’t mandatory, having a basic understanding of its underlying implementation can be helpful. For more details, refer to the [Spring Security documentation](https://docs.spring.io/spring-security/site/docs/4.0.x/reference/htmlsingle/).

+
+
+
+
+
+
+

2. What’s New in Grails Spring Security Core Plugin 6.0.0

+
+
+

This release is more than just an upgrade; it’s a transformative step towards elevating your application’s security, compatibility, and development experience. Get ready to embark on a journey of enhancements that will empower you to build robust, modern web applications. Let’s dive into the exciting changes that version 6.0.0 brings.

+
+
+

2.1. Elevated Security and Compatibility

+
+

Version 6.0.0 of the Grails Spring Security Core Plugin brings enhanced security features and improved compatibility with Grails 6. With a revamped underlying Spring Security framework powered by version 5.8.6, your application gains access to the latest security enhancements and bug fixes, safeguarding it against evolving threats and vulnerabilities.

+
+
+
+

2.2. Streamlined Commands for Grails 6

+
+

One of the notable improvements is the seamless transition to Grails 6. The plugin now offers upgraded commands that are fully compatible with Grails 6. This is a vital enhancement as it ensures your existing scripts remain functional without compatibility issues. The familiar commands like s2-quickstart have been refined, enabling you to trigger them using Gradle tasks. For example, you can now execute:

+
+
+
+
./gradlew runCommand "-Pargs=s2-quickstart com.yourapp User Role"
+
+
+
+

This aligns perfectly with Grails 6’s development landscape, making your application’s migration smoother than ever before.

+
+
+
+

2.3. Effortless Documentation Navigation

+
+

We understand the importance of hassle-free documentation navigation. With the Internal Docs task now enhanced, generating documentation becomes a breeze. But that’s not all – we’ve introduced a slick select drop-down feature. This feature allows you to effortlessly switch between documentation for different releases. Whether you’re exploring the latest version or revisiting older ones, finding the information you need has never been easier.

+
+
+
+

2.4. Embracing the Grails 6 Framework

+
+

In the ever-evolving world of web development, the Grails Spring Security Core Plugin is keeping pace. Version 6.0.0 ensures seamless integration with Grails 6, enabling you to harness the cutting-edge features and improvements of the Grails framework. This integration ensures that your application can leverage both the power of Grails and the robust security features of the plugin.

+
+
+
+
+
+

3. Domain Classes

+
+
+

By default the plugin uses regular Grails domain classes to access its required data. It’s easy to create your own user lookup code though, which can access a database or any other source to retrieve user and authority data. See Custom UserDetailsService for how to implement this.

+
+
+

To use the standard user lookup you’ll need at a minimum a “person” and an “authority” domain class. In addition, if you want to store URL <==> Role mappings in the database (this is one of multiple approaches for defining the mappings) you need a “requestmap” domain class. If you use the recommended approach for mapping the many-to-many relationship between “person” and “authority”, you also need a domain class to map the join table.

+
+
+

To use the user/group lookup you’ll also need a “group” domain class. If you are using the recommended approach for mapping many-to-many relationship between “person” and “group” and between “group” and “authority” you’ll need a domain class for each to map the join tables. You can still additionally use “requestmap” with this approach.

+
+
+

The s2-quickstart script creates initial domain classes for you. You specify the package and class names, and it creates the corresponding domain classes. After that you can customize them as you like. You can add additional properties, methods, and so on, as long as the core security-related functionality remains.

+
+
+

3.1. Person Class

+
+

Spring Security uses an Authentication object to determine whether the current user is allowed to perform a secured action, such as accessing a URL, manipulating a secured domain object, invoking a secured method, and so on. This object is created during login. Typically overlap occurs between the need for authentication data and the need to represent a user in the application in ways that are unrelated to security. The mechanism for populating the authentication is completely pluggable in Spring Security; you only need to provide an implementation of UserDetailsService and implement its one method, loadUserByUsername(String username).

+
+
+

By default the plugin uses a Grails “person” domain class to manage this data. username, enabled, and password are the default names of the core required properties. You can easily plug in your own implementation (Custom UserDetailsService), and rename the class, package, and properties. In addition, you should define an authorities property to retrieve roles; this can be a property or a getAuthorities() method, and it can be defined through a traditional GORM many-to-many or a custom mapping.

+
+
+

Assuming you choose com.mycompany.myapp as your package, and User as your class name, you’ll generate this class:

+
+
+
User.groovy
+
+
package com.mycompany.myapp
+
+import groovy.transform.EqualsAndHashCode
+import groovy.transform.ToString
+import grails.compiler.GrailsCompileStatic
+
+@GrailsCompileStatic
+@EqualsAndHashCode(includes='username')
+@ToString(includes='username', includeNames=true, includePackage=false)
+class User implements Serializable {
+
+	private static final long serialVersionUID = 1
+
+	String username
+	String password
+	boolean enabled = true
+	boolean accountExpired
+	boolean accountLocked
+	boolean passwordExpired
+
+	Set<Role> getAuthorities() {
+		(UserRole.findAllByUser(this) as List<UserRole>)*.role as Set<Role>
+	}
+
+	static constraints = {
+		password blank: false, password: true
+		username blank: false, unique: true
+	}
+
+	static mapping = {
+		password column: '`password`'
+	}
+}
+
+
+
+

Optionally, you can add other properties such as email, firstName, and lastName, convenience methods, and so on:

+
+
+
User.groovy
+
+
package com.mycompany.myapp
+
+import groovy.transform.EqualsAndHashCode
+import groovy.transform.ToString
+import grails.compiler.GrailsCompileStatic
+
+@GrailsCompileStatic
+@EqualsAndHashCode(includes='username')
+@ToString(includes='username', includeNames=true, includePackage=false)
+class User implements Serializable {
+
+	private static final long serialVersionUID = 1
+
+	String username
+	String password
+	boolean enabled = true
+    String email (1)
+    String firstName (1)
+    String lastName (1)
+	boolean accountExpired
+	boolean accountLocked
+	boolean passwordExpired
+
+    def someMethod() { (2)
+        ...
+    }
+
+
+	Set<Role> getAuthorities() {
+		(UserRole.findAllByUser(this) as List<UserRole>)*.role as Set<Role>
+	}
+
+	static constraints = {
+		password blank: false, password: true
+		username blank: false, unique: true
+	}
+
+	static mapping = {
+		password column: '`password`'
+	}
+}
+
+
+
+ + + + + + + + + +
1Other properties
2Convenience methods
+
+
+

The getAuthorities() method is analagous to defining static hasMany = [authorities: Authority] in a traditional many-to-many mapping. This way GormUserDetailsService can call user.authorities during login to retrieve the roles without the overhead of a bidirectional many-to-many mapping.

+
+
+

The class and property names are configurable using these configuration attributes:

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. User class property names
PropertyDefault ValueMeaning

userLookup.userDomainClassName

none

User class name

userLookup.usernamePropertyName

“username”

User class username property

userLookup.passwordPropertyName

“password”

User class password property

userLookup.authoritiesPropertyName

“authorities”

User class role collection property

userLookup.enabledPropertyName

“enabled”

User class enabled property

userLookup.accountExpiredPropertyName

“accountExpired”

User class account expired property

userLookup.accountLockedPropertyName

“accountLocked”

User class account locked property

userLookup.passwordExpiredPropertyName

“passwordExpired”

User class password expired property

userLookup.authorityJoinClassName

none

User/Role many-many join class name

+
+
+

3.2. Authority Class

+
+

The Spring Security plugin uses an “authority” class to represent a user’s roles in the application. In general this class restricts URLs to users who have been assigned the required access rights. A user can be granted multiple roles to indicate various access rights in the application, and should have at least one. A basic user who can access only non-restricted resources but can still authenticate is a bit unusual. Spring Security usually functions fine if a user has no granted authorities, but fails in a few places that assume one or more. So if a user authenticates successfully but has no granted roles, the plugin grants the user a “virtual” role, ROLE_NO_ROLES. Thus the user satisfies Spring Security’s requirements but cannot access secure resources, as you would not associate any secure resources with this role.

+
+
+ + + + + +
+ + +
+

Note that you aren’t required to use roles at all; an application with simple security requirements could use the isAuthenticated() expression for guarded URLs to partition the site’s URLs into those that are accessible to anyone and those that merely require an authenticated user.

+
+
+
+
+

Like the “person” class, the “authority” class has a default name, Authority, and a default name for its one required property, authority. +If you want to use another existing domain class, it simply has to have a property for name. As with the name of the class, the names of the properties can be whatever you want - they’re specified in grails-app/conf/application.groovy.

+
+
+

Assuming you choose com.mycompany.myapp as your package, and Role as your class name, you’ll generate this class:

+
+
+
Role.groovy
+
+
package com.mycompany.myapp
+
+import groovy.transform.EqualsAndHashCode
+import groovy.transform.ToString
+import grails.compiler.GrailsCompileStatic
+
+@GrailsCompileStatic
+@EqualsAndHashCode(includes='authority')
+@ToString(includes='authority', includeNames=true, includePackage=false)
+class Role implements Serializable {
+
+	private static final long serialVersionUID = 1
+
+	String authority
+
+	static constraints = {
+		authority blank: false, unique: true
+	}
+
+	static mapping = {
+		cache true
+	}
+}
+
+
+
+

The class and property names are configurable using these configuration attributes:

+
+ + +++++ + + + + + + + + + + + + + + + + + + + +
Table 2. Role class configuration options
PropertyDefault ValueMeaning

authority.className

none

Role class name

authority.nameField

“authority”

Role class role name property

+
+ + + + + +
+ + +
+

Role names must start with “ROLE_”. This is configurable in Spring Security, but not in the plugin. It would be possible to allow different prefixes, but it’s important that the prefix not be blank as the prefix is used to differentiate between role names and tokens such as IS_AUTHENTICATED_FULLY/IS_AUTHENTICATED_ANONYMOUSLY/etc., and SpEL expressions.

+
+
+

The role names should be primarily an internal implementation detail; if you want to display friendlier names in a UI, it’s simple to remove the prefix first.

+
+
+
+
+
+

3.3. PersonAuthority Class

+
+

The typical approach to mapping the relationship between “person” and “authority” is a many-to-many. Users have multiple roles, and roles are shared by multiple users. This approach can be problematic in Grails, because a popular role, for example, ROLE_USER, will be granted to many users in your application. GORM uses collections to manage adding and removing related instances and maps many-to-many relationships bidirectionally. Granting a role to a user requires loading all existing users who have that role because the collection is a Set. So even though no uniqueness concerns may exist, Hibernate loads them all to enforce uniqueness. The recommended approach in the plugin is to map a domain class to the join table that manages the many-to-many, and using that to grant and revoke roles to users.

+
+
+

Like the other domain classes, this class is generated for you, so you don’t need to deal with the details of mapping it. Assuming you choose com.mycompany.myapp as your package, and User and Role as your class names, you’ll generate this class:

+
+
+
UserRole.groovy
+
+
package com.mycompany.myapp
+
+import grails.gorm.DetachedCriteria
+import groovy.transform.ToString
+
+import org.codehaus.groovy.util.HashCodeHelper
+import grails.compiler.GrailsCompileStatic
+
+@GrailsCompileStatic
+@ToString(cache=true, includeNames=true, includePackage=false)
+class UserRole implements Serializable {
+
+	private static final long serialVersionUID = 1
+
+	User user
+	Role role
+
+	@Override
+	boolean equals(other) {
+		if (other instanceof UserRole) {
+			other.userId == user?.id && other.roleId == role?.id
+		}
+	}
+
+    @Override
+	int hashCode() {
+	    int hashCode = HashCodeHelper.initHash()
+        if (user) {
+            hashCode = HashCodeHelper.updateHash(hashCode, user.id)
+		}
+		if (role) {
+		    hashCode = HashCodeHelper.updateHash(hashCode, role.id)
+		}
+		hashCode
+	}
+
+	static UserRole get(long userId, long roleId) {
+		criteriaFor(userId, roleId).get()
+	}
+
+	static boolean exists(long userId, long roleId) {
+		criteriaFor(userId, roleId).count()
+	}
+
+	private static DetachedCriteria criteriaFor(long userId, long roleId) {
+		UserRole.where {
+			user == User.load(userId) &&
+			role == Role.load(roleId)
+		}
+	}
+
+	static UserRole create(User user, Role role, boolean flush = false) {
+		def instance = new UserRole(user: user, role: role)
+		instance.save(flush: flush)
+		instance
+	}
+
+	static boolean remove(User u, Role r) {
+		if (u != null && r != null) {
+			UserRole.where { user == u && role == r }.deleteAll()
+		}
+	}
+
+	static int removeAll(User u) {
+		u == null ? 0 : UserRole.where { user == u }.deleteAll() as int
+	}
+
+	static int removeAll(Role r) {
+		r == null ? 0 : UserRole.where { role == r }.deleteAll() as int
+	}
+
+	static constraints = {
+		role validator: { Role r, UserRole ur ->
+			if (ur.user?.id) {
+				UserRole.withNewSession {
+					if (UserRole.exists(ur.user.id, r.id)) {
+						return ['userRole.exists']
+					}
+				}
+			}
+		}
+	}
+
+	static mapping = {
+		id composite: ['user', 'role']
+		version false
+	}
+}
+
+
+
+

The helper methods make it easy to grant or revoke roles. Assuming you have already loaded a user and a role, you grant the role to the user as follows:

+
+
+
Listing 1. Granting a role
+
+
User user = ...
+Role role = ...
+UserRole.create user, role
+
+
+
+

Revoking a role is similar:

+
+
+
Listing 2. Revoking a role
+
+
User user = ...
+Role role = ...
+UserRole.remove user, role
+
+
+
+

The class name is the only configurable attribute:

+
+ + +++++ + + + + + + + + + + + + + + +
Table 3. UserRole configuration options
PropertyDefault ValueMeaning

userLookup.authorityJoinClassName

none

User/Role many-many join class name

+
+
+

3.4. Group Class

+
+

The plugin provides you the option of creating an access inheritance level between “person” and “authority”: the “group”. The next three classes you will read about (including this one) are only used in a “person”/“group”/“authority” implementation. Rather than granting authorities directly to a “person”, you can create a “group”, map authorities to it, and then map a “person” to that “group”. For applications that have a one or more groups of users who need the same level of access, having one or more “group” instances makes managing changes to access levels easier because the authorities that make up that access level are encapsulated in the “group”, and a single change will affect all of the users.

+
+
+

If you run the s2-quickstart script with the group name specified and use com.mycompany.myapp as your package and RoleGroup and Role as your class names, you’ll generate this class:

+
+
+
RoleGroup.groovy
+
+
package com.mycompany.myapp
+
+import groovy.transform.EqualsAndHashCode
+import groovy.transform.ToString
+import grails.compiler.GrailsCompileStatic
+
+@GrailsCompileStatic
+@EqualsAndHashCode(includes='name')
+@ToString(includes='name', includeNames=true, includePackage=false)
+class RoleGroup implements Serializable {
+
+	private static final long serialVersionUID = 1
+
+	String name
+
+	Set<Role> getAuthorities() {
+		(RoleGroupRole.findAllByRoleGroup(this) as List<RoleGroupRole>)*.role as Set<Role>
+	}
+
+	static constraints = {
+		name blank: false, unique: true
+	}
+
+	static mapping = {
+		cache true
+	}
+}
+
+
+
+

When running the s2-quickstart script with the group name specified, the “person” class will be generated differently to accommodate the use of groups. Assuming you use com.mycompany.myapp as your package and User and RoleGroup as your class names, the getAuthorities() method will be generated like so:

+
+
+
Listing 3. The generated getAuthorities() method when using role groups
+
+
Set<RoleGroup> getAuthorities() {
+	(UserRoleGroup.findAllByUser(this) as List<UserRoleGroup>)*.roleGroup as Set<RoleGroup>
+}
+
+
+
+

The plugin assumes the attribute authorities will provide the “authority” collection for each class, but you can change the property names in grails-app/conf/application.groovy. You also must ensure that the property useRoleGroups is set to true in order for GormUserDetailsService to properly retrieve the authorities.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + +
Table 4. RoleGroup configuration options
PropertyDefault ValueMeaning

useRoleGroups

false

Whether to use “authority group” implementation when loading user authorities

authority.groupAuthorityNameField

none (the s2-quickstart script uses the name “authorities”)

RoleGroup class role collection property

+
+
+

3.5. PersonGroup Class

+
+

The typical approach to mapping the relationship between “person” and “group” is a many-to-many. In a standard implementation, users have multiple roles, and roles are shared by multiple users. In a group implementation, users have multiple groups, and groups are shared by multiple users. For the same reason we would use a join class between “person” and “authority”, we should use one between “person” and “group”. Please note that when using groups, there should not be a join class between “person” and “authority”, since “group” resides between the two.

+
+
+

If you run the s2-quickstart script with the group name specified, this class will be generated for you, so you don’t need to deal with the details of mapping it. Assuming you choose com.mycompany.myapp as your package, and User and RoleGroup as your class names, you’ll generate this class:

+
+
+
UserRoleGroup.groovy
+
+
package com.mycompany.myapp
+
+import grails.gorm.DetachedCriteria
+import groovy.transform.ToString
+import org.codehaus.groovy.util.HashCodeHelper
+import grails.compiler.GrailsCompileStatic
+
+@GrailsCompileStatic
+@ToString(cache=true, includeNames=true, includePackage=false)
+class UserRoleGroup implements Serializable {
+
+	private static final long serialVersionUID = 1
+
+	User user
+	RoleGroup roleGroup
+
+	@Override
+	boolean equals(other) {
+		if (other instanceof UserRoleGroup) {
+			other.userId == user?.id && other.roleGroupId == roleGroup?.id
+		}
+	}
+
+    @Override
+	int hashCode() {
+	    int hashCode = HashCodeHelper.initHash()
+        if (user) {
+            hashCode = HashCodeHelper.updateHash(hashCode, user.id)
+		}
+		if (roleGroup) {
+		    hashCode = HashCodeHelper.updateHash(hashCode, roleGroup.id)
+		}
+		hashCode
+	}
+	
+	static UserRoleGroup get(long userId, long roleGroupId) {
+		criteriaFor(userId, roleGroupId).get()
+	}
+
+	static boolean exists(long userId, long roleGroupId) {
+		criteriaFor(userId, roleGroupId).count()
+	}
+
+	private static DetachedCriteria criteriaFor(long userId, long roleGroupId) {
+		UserRoleGroup.where {
+			user == User.load(userId) &&
+			roleGroup == RoleGroup.load(roleGroupId)
+		}
+	}
+
+	static UserRoleGroup create(User user, RoleGroup roleGroup, boolean flush = false) {
+		def instance = new UserRoleGroup(user: user, roleGroup: roleGroup)
+		instance.save(flush: flush)
+		instance
+	}
+
+	static boolean remove(User u, RoleGroup rg) {
+		if (u != null && rg != null) {
+			UserRoleGroup.where { user == u && roleGroup == rg }.deleteAll()
+		}
+	}
+
+	static int removeAll(User u) {
+		u == null ? 0 : UserRoleGroup.where { user == u }.deleteAll() as int
+	}
+
+	static int removeAll(RoleGroup rg) {
+		rg == null ? 0 : UserRoleGroup.where { roleGroup == rg }.deleteAll() as int
+	}
+
+	static constraints = {
+		user validator: { User u, UserRoleGroup ug ->
+			if (ug.roleGroup?.id) {
+				UserRoleGroup.withNewSession {
+					if (UserRoleGroup.exists(u.id, ug.roleGroup.id)) {
+						return ['userGroup.exists']
+					}
+				}
+			}
+		}
+	}
+
+	static mapping = {
+		id composite: ['roleGroup', 'user']
+		version false
+	}
+}
+
+
+
+
+

3.6. GroupAuthority Class

+
+

The typical approach to mapping the relationship between “group” and “authority” is a many-to-many. In a standard implementation, users have multiple roles, and roles are shared by multiple users. In a group implementation, groups have multiple roles and roles are shared by multiple groups. For the same reason we would use a join class between “person” and “authority”, we should use one between “group” and “authority”.

+
+
+

If you run the s2-quickstart script with the group name specified, this class will be generated for you, so you don’t need to deal with the details of mapping it. Assuming you choose com.mycompany.myapp as your package, and RoleGroup and Role as your class names, you’ll generate this class:

+
+
+
RoleGroupRole.groovy
+
+
package com.mycompany.myapp
+
+import grails.gorm.DetachedCriteria
+import groovy.transform.ToString
+
+import org.codehaus.groovy.util.HashCodeHelper
+import grails.compiler.GrailsCompileStatic
+
+@GrailsCompileStatic
+@ToString(cache=true, includeNames=true, includePackage=false)
+class RoleGroupRole implements Serializable {
+
+	private static final long serialVersionUID = 1
+
+	RoleGroup roleGroup
+	Role role
+
+	@Override
+	boolean equals(other) {
+		if (other instanceof RoleGroupRole) {
+			other.roleId == role?.id && other.roleGroupId == roleGroup?.id
+		}
+	}
+
+	@Override
+	int hashCode() {
+	    int hashCode = HashCodeHelper.initHash()
+        if (roleGroup) {
+            hashCode = HashCodeHelper.updateHash(hashCode, roleGroup.id)
+		}
+		if (role) {
+		    hashCode = HashCodeHelper.updateHash(hashCode, role.id)
+		}
+		hashCode
+	}
+
+	static RoleGroupRole get(long roleGroupId, long roleId) {
+		criteriaFor(roleGroupId, roleId).get()
+	}
+
+	static boolean exists(long roleGroupId, long roleId) {
+		criteriaFor(roleGroupId, roleId).count()
+	}
+
+	private static DetachedCriteria criteriaFor(long roleGroupId, long roleId) {
+		RoleGroupRole.where {
+			roleGroup == RoleGroup.load(roleGroupId) &&
+			role == Role.load(roleId)
+		}
+	}
+
+	static RoleGroupRole create(RoleGroup roleGroup, Role role, boolean flush = false) {
+		def instance = new RoleGroupRole(roleGroup: roleGroup, role: role)
+		instance.save(flush: flush)
+		instance
+	}
+
+	static boolean remove(RoleGroup rg, Role r) {
+		if (rg != null && r != null) {
+			RoleGroupRole.where { roleGroup == rg && role == r }.deleteAll()
+		}
+	}
+
+	static int removeAll(Role r) {
+		r == null ? 0 : RoleGroupRole.where { role == r }.deleteAll() as int
+	}
+
+	static int removeAll(RoleGroup rg) {
+		rg == null ? 0 : RoleGroupRole.where { roleGroup == rg }.deleteAll() as int
+	}
+
+	static constraints = {
+		role validator: { Role r, RoleGroupRole rg ->
+			if (rg.roleGroup?.id) {
+				RoleGroupRole.withNewSession {
+					if (RoleGroupRole.exists(rg.roleGroup.id, r.id)) {
+						return ['roleGroup.exists']
+					}
+				}
+			}
+		}
+	}
+
+	static mapping = {
+		id composite: ['roleGroup', 'role']
+		version false
+	}
+}
+
+
+
+
+

3.7. Requestmap Class

+
+

Optionally, use this class to store request mapping entries in the database instead of defining them with annotations or in application.groovy. This option makes the class configurable at runtime; you can add, remove and edit rules without restarting your application.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5. Requestmap class configuration options
PropertyDefault ValueMeaning

requestMap.className

none

requestmap class name

requestMap.urlField

“url”

URL pattern property name

requestMap.configAttributeField

“configAttribute”

authority pattern property name

requestMap.httpMethodField

“httpMethod”

HTTP method property name (optional, does not have to exist in the class if you don’t require URL/method security)

+
+

Assuming you choose com.mycompany.myapp as your package, and Requestmap as your class name, you’ll generate this class:

+
+
+
Requestmap.groovy
+
+
package com.mycompany.myapp
+
+import org.springframework.http.HttpMethod
+
+import groovy.transform.EqualsAndHashCode
+import groovy.transform.ToString
+import grails.compiler.GrailsCompileStatic
+
+@GrailsCompileStatic
+@EqualsAndHashCode(includes=['configAttribute', 'httpMethod', 'url'])
+@ToString(includes=['configAttribute', 'httpMethod', 'url'], cache=true, includeNames=true, includePackage=false)
+class RequestMap implements Serializable {
+
+	private static final long serialVersionUID = 1
+
+	String configAttribute
+	HttpMethod httpMethod
+	String url
+
+	static constraints = {
+		configAttribute blank: false
+		httpMethod nullable: true
+		url blank: false, unique: 'httpMethod'
+	}
+
+	static mapping = {
+		cache true
+	}
+}
+
+
+
+

To use Requestmap entries to guard URLs, see Requestmap Instances Stored in the Database.

+
+
+
+
+
+

4. Configuring Request Mappings to Secure URLs

+
+
+

You can choose among the following approaches to configuring request mappings for secure application URLs. The goal is to map URL patterns to the roles required to access those URLs.

+
+
+ +
+
+

You can only use one method at a time. You configure it with the securityConfigType attribute; the value has to be an SecurityConfigType enum value or the name of the enum as a String.

+
+
+

4.1. Pessimistic Lockdown

+
+

Many applications are mostly public, with some pages only accessible to authenticated users with various roles. In this case, it might make sense to leave URLs open by default and restrict access on a case-by-case basis. However, if your application is primarily secure, you can use a pessimistic lockdown approach to deny access to all URLs that do not have an applicable URL <==> Role request mapping. But the pessimistic approach is safer; if you forget to restrict access to a URL using the optimistic approach, it might take a while to discover that unauthorized users can access the URL, but if you forget to allow access when using the pessimistic approach, no user can access it and the error should be quickly discovered.

+
+
+

The pessimistic approach is the default, and there are two configuration options that apply. If rejectIfNoRule is true (the default) then any URL that has no request mappings (an annotation, entry in controllerAnnotations.staticRules or interceptUrlMap, or a Requestmap instance) will be denied to all users. The other option is fii.rejectPublicInvocations and if it is true (the default) then un-mapped URLs will trigger an IllegalArgumentException and will show the error page. This is uglier, but more useful because it’s very clear that there is a misconfiguration. When fii.rejectPublicInvocations is false but rejectIfNoRule is true you just see the “Sorry, you’re not authorized to view this page.” error 403 message.

+
+
+

Note that the two settings are mutually exclusive. If rejectIfNoRule is true then fii.rejectPublicInvocations is ignored because the request will transition to the login page or the error 403 page. If you want the more obvious error page, set fii.rejectPublicInvocations to true and rejectIfNoRule to false to allow that check to occur.

+
+
+

To reject un-mapped URLs with a 403 error code, use these settings (or none since rejectIfNoRule defaults to true)

+
+
+
Listing 4. Enabling rejectIfNoRule
+
+
grails.plugin.springsecurity.rejectIfNoRule = true
+grails.plugin.springsecurity.fii.rejectPublicInvocations = false
+
+
+
+

and to reject with the error 500 page, use these (optionally omit rejectPublicInvocations since it defaults to true):

+
+
+
Listing 5. Enabling fii.rejectPublicInvocations
+
+
grails.plugin.springsecurity.rejectIfNoRule = false
+grails.plugin.springsecurity.fii.rejectPublicInvocations = true
+
+
+
+

Note that if you set rejectIfNoRule or rejectPublicInvocations to true you’ll need to configure the staticRules map to include URLs that can’t otherwise be guarded:

+
+
+
Listing 6. Example controllerAnnotations.staticRules configuration when using rejectIfNoRule or fii.rejectPublicInvocations
+
+
grails.plugin.springsecurity.controllerAnnotations.staticRules = [
+   [pattern: '/',               access: ['permitAll']],
+   [pattern: '/error',          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']]
+]
+
+
+
+ + + + + +
+ + +
+

Note that the syntax of the staticRules block has changed from previous versions of the plugin where the keys were URL patterns and the values were access rules (roles, expressions, etc.) To avoid issues in configuration parsing and to allow optionally specifying the HTTP method associated with one or more of the rules, the staticRules block is now specified as a List of Maps. Each Map defines one combination of url pattern and access rules (and optionally HTTP method). If there are multiple access rules, specify them as a List of Strings; if there is only one access rule, its value can be a String or a single-element List.

+
+
+

The preceding staticRules example includes the default mappings defined when running the s2-quickstart script. Here’s a more complete example using all configuration options:

+
+
+
+
grails.plugin.springsecurity.controllerAnnotations.staticRules = [
+   [pattern: '/',               access: ['permitAll']],
+   [pattern: '/error',          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: '/user/**',        access: 'ROLE_USER'],
+   [pattern: '/admin/**',       access: ['ROLE_ADMIN', 'IS_AUTHENTICATED_FULLY']],
+   [pattern: '/thing/register', access: 'isAuthenticated()', httpMethod: 'PUT']
+]
+
+
+
+

Now in addition to the default mappings, we require an authentication with ROLE_USER for any URL starting with /user, a “fully authenticated” authentication (i.e. an explicit login was performed without using remember-me) with ROLE_ADMIN for any URL starting with /admin, and finally to access the URL /thing/register the user must be authenticated with any role(s) but must use a PUT request.

+
+
+
+
+

This is needed when using annotations; if you use the grails.plugin.springsecurity.interceptUrlMap map in application.groovy you’ll need to add these URLs too, and likewise when using Requestmap instances. If you don’t use annotations, you must add rules for the login and logout controllers also. You can add Requestmaps manually, or in BootStrap.groovy, for example:

+
+
+
Listing 7. Creating default requestmap instances when using rejectIfNoRule or fii.rejectPublicInvocations
+
+
for (String url in [
+      '/', '/error', '/index', '/index.gsp', '/**/favicon.ico', '/shutdown',
+      '/**/js/**', '/**/css/**', '/**/images/**',
+      '/login', '/login.*', '/login/*',
+      '/logout', '/logout.*', '/logout/*']) {
+   new Requestmap(url: url, configAttribute: 'permitAll').save()
+}
+springSecurityService.clearCachedRequestmaps()
+
+
+
+

The analogous interceptUrlMap settings would be:

+
+
+
Listing 8. Example interceptUrlMap configuration when using rejectIfNoRule or fii.rejectPublicInvocations
+
+
grails.plugin.springsecurity.interceptUrlMap = [
+   [pattern: '/',               access: ['permitAll']],
+   [pattern: '/error',          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: '/login/**',       access: ['permitAll']],
+   [pattern: '/logout/**',      access: ['permitAll']]
+]
+
+
+
+

In addition, when you enable the switch-user feature, you’ll have to specify access rules for the associated URLs, e.g.

+
+
+
+
[pattern: '/login/impersonate', access: ['ROLE_ADMIN']],
+[pattern: '/logout/impersonate', access: ['permitAll']]
+
+
+
+
+

4.2. URLs and Authorities

+
+

In each approach you configure a mapping for a URL pattern to the role(s) that are required to access those URLs, for example, /admin/user/** requires ROLE_ADMIN. In addition, you can combine the role(s) with SpEL expressions and/or tokens such as IS_AUTHENTICATED_ANONYMOUSLY, IS_AUTHENTICATED_REMEMBERED, and IS_AUTHENTICATED_FULLY. One or more voters (Voters) will process any tokens and enforce a rule based on them:

+
+
+
    +
  • +

    IS_AUTHENTICATED_ANONYMOUSLY

    +
    +
      +
    • +

      signifies that anyone can access this URL. By default the AnonymousAuthenticationFilter ensures an “anonymous” Authentication with no roles so that every user has an authentication. The token accepts any authentication, even anonymous.

      +
    • +
    • +

      The SpEL expression permitAll is equivalent to IS_AUTHENTICATED_ANONYMOUSLY and is typically more intuitive to use

      +
    • +
    +
    +
  • +
  • +

    IS_AUTHENTICATED_REMEMBERED

    +
    +
      +
    • +

      requires the user to be authenticated through a remember-me cookie or an explicit login.

      +
    • +
    • +

      The SpEL expression isAuthenticated() or isRememberMe() is equivalent to IS_AUTHENTICATED_REMEMBERED and is typically more intuitive to use

      +
    • +
    +
    +
  • +
  • +

    IS_AUTHENTICATED_FULLY

    +
    +
      +
    • +

      requires the user to be fully authenticated with an explicit login.

      +
    • +
    • +

      The SpEL expression isFullyAuthenticated() is equivalent to IS_AUTHENTICATED_FULLY and is typically more intuitive to use

      +
    • +
    +
    +
  • +
+
+
+

With IS_AUTHENTICATED_FULLY you can implement a security scheme whereby users can check a remember-me checkbox during login and be auto-authenticated each time they return to your site, but must still log in with a password for some parts of the site. For example, allow regular browsing and adding items to a shopping cart with only a cookie, but require an explicit login to check out or view purchase history.

+
+
+

For more information on IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED, and IS_AUTHENTICATED_ANONYMOUSLY, see the Javadoc for AuthenticatedVoter

+
+
+ + + + + +
+ + +
+

The plugin isn’t compatible with Grails <g:actionSubmit> tags. These are used in the autogenerated GSPs that are created for you, and they enable having multiple submit buttons, each with its own action, inside a single form. The problem from the security perspective is that the form posts to the default action of the controller, and Grails figures out the handler action to use based on the action attribute of the actionSubmit tag. So for example you can guard the /person/delete with a restrictive role, but given this typical edit form:

+
+
+
+
<g:form>
+   ...
+   <g:actionSubmit class="save" action="update" value='Update' />
+   <g:actionSubmit class="delete" action="delete" value="'Delete' />
+</g:form>
+
+
+
+

both actions will be allowed if the user has permission to access the /person/index url, which would often be the case.

+
+
+

The workaround is to create separate forms without using actionSubmit and explicitly set the action on the <g:form> tags, which will result in form submissions to the expected urls and properly guarded urls.

+
+
+
+
+
+

4.3. Comparing the Approaches

+
+

Each approach has its advantages and disadvantages. Annotations and the application.groovy Map are less flexible because they are configured once in the code and you can update them only by restarting the application (in prod mode anyway). In practice this limitation is minor, because security mappings for most applications are unlikely to change at runtime.

+
+
+

On the other hand, storing Requestmap entries enables runtime-configurability. This approach gives you a core set of rules populated at application startup that you can edit, add to, and delete as needed. However, it separates the security rules from the application code, which is less convenient than having the rules defined in grails-app/conf/application.groovy or in the applicable controllers using annotations.

+
+
+

URLs must be mapped in lowercase if you use the Requestmap or grails-app/conf/application.groovy map approaches. For example, if you have a FooBarController, its urls will be of the form /fooBar/list, /fooBar/create, and so on, but these must be mapped as /foobar/, /foobar/list, /foobar/create. This mapping is handled automatically for you if you use annotations.

+
+
+
+

4.4. Defining Secured Annotations

+
+

You can use an @Secured annotation (either the standard org.springframework.security.access.annotation.Secured or the plugin’s grails.plugin.springsecurity.annotation.Secured which has the same attributes and features but also supports defining a closure as the config attribute to make authorization decisions) in your controllers to configure which roles are required for which actions. To use annotations, specify securityConfigType="Annotation", or leave it unspecified because it’s the default:

+
+
+
Listing 9. Specifying securityConfigType as “Annotation”
+
+
grails.plugin.springsecurity.securityConfigType = "Annotation"
+
+
+
+

You can define the annotation at the class level, meaning that the specified roles are required for all actions, or at the action level, or both. If the class and an action are annotated then the action annotation values will be used since they’re more specific.

+
+
+

For example, given this controller:

+
+
+
Listing 10. An annotated controller
+
+
package com.mycompany.myapp
+
+import grails.plugin.springsecurity.annotation.Secured
+
+class SecureAnnotatedController {
+
+   @Secured('ROLE_ADMIN')
+   def index() {
+      render 'you have ROLE_ADMIN'
+   }
+
+   @Secured(['ROLE_ADMIN', 'ROLE_SUPERUSER'])
+   def adminEither() {
+      render 'you have ROLE_ADMIN or SUPERUSER'
+   }
+
+   def anybody() {
+      render 'anyone can see this' // assuming you're not using "strict" mode,
+                                   // otherwise the action is not viewable by anyone
+   }
+}
+
+
+
+

you must be authenticated and have ROLE_ADMIN to see /myapp/secureAnnotated (or /myapp/secureAnnotated/index) and be authenticated and have ROLE_ADMIN or ROLE_SUPERUSER to see /myapp/secureAnnotated/adminEither. Any user can access /myapp/secureAnnotated/anybody if you have disabled “strict” mode (using rejectIfNoRule), and nobody can access the action by default since it has no access rule configured.

+
+
+

In addition, you can define a closure in the annotation which will be called during access checking. The closure must return true or false and has all of the methods and properties that are available when using SpEL expressions, since the closure’s delegate is set to a subclass of WebSecurityExpressionRoot, and also the Spring ApplicationContext as the ctx property:

+
+
+
Listing 11. An example of using a Closure in with @Secured
+
+
@Secured(closure = {
+   assert request
+   assert ctx
+   authentication.name == 'admin1'
+})
+def someMethod() {
+   ...
+}
+
+
+
+

Often most actions in a controller require similar access rules, so you can also define annotations at the class level:

+
+
+
+
package com.mycompany.myapp
+
+import grails.plugin.springsecurity.annotation.Secured
+
+@Secured('ROLE_ADMIN')
+class SecureClassAnnotatedController {
+
+   def index() {
+      render 'index: you have ROLE_ADMIN'
+   }
+
+   def otherAction() {
+      render 'otherAction: you have ROLE_ADMIN'
+   }
+
+   @Secured('ROLE_SUPERUSER')
+   def super() {
+      render 'super: you have ROLE_SUPERUSER'
+   }
+}
+
+
+
+

Here you need to be authenticated and have ROLE_ADMIN to see /myapp/secureClassAnnotated (or /myapp/secureClassAnnotated/index) or /myapp/secureClassAnnotated/otherAction. However, you must have ROLE_SUPERUSER to access /myapp/secureClassAnnotated/super. The action-scope annotation overrides the class-scope annotation. Note that “strict” mode isn’t applicable here since all actions have an access rule defined (either explicitly or inherited from the class-level annotation).

+
+
+

Additionally, you can specify the HTTP method that is required in each annotation for the access rule, e.g.

+
+
+
+
package com.mycompany.myapp
+
+import grails.plugin.springsecurity.annotation.Secured
+
+class SecureAnnotatedController {
+
+   @Secured(value = ['ROLE_ADMIN'], httpMethod = 'GET')
+   def create() {
+      ...
+   }
+
+   @Secured(value = ['ROLE_ADMIN'], httpMethod = 'POST')
+   def save() {
+      ...
+   }
+}
+
+
+
+

Here you must have ROLE_ADMIN for both the create and save actions but create requires a GET request (since it renders the form to create a new instance) and save requires POST (since it’s the action that the form posts to).

+
+
+

4.4.1. Securing RESTful domain classes

+
+

Since Grails 2.3, domain classes can be annotated with the grails.rest.Resource AST transformation, which will generate internally a controller with the default CRUD operations.

+
+
+

You can also use the @Secured annotation on such domain classes:

+
+
+
+
@Resource
+@Secured('ROLE_ADMIN')
+class Thing {
+
+   String name
+}
+
+
+
+
+

4.4.2. controllerAnnotations.staticRules

+
+

You can also define “static” mappings that cannot be expressed in the controllers, such as '/**' or for JavaScript, CSS, or image URLs. Use the controllerAnnotations.staticRules property, for example:

+
+
+
+
grails.plugin.springsecurity.controllerAnnotations.staticRules = [
+   ...
+   [pattern: '/js/admin/**',   access: ['ROLE_ADMIN']],
+   [pattern: '/someplugin/**', access: ['ROLE_ADMIN']]
+]
+
+
+
+

This example maps all URLs associated with SomePluginController, which has URLs of the form /somePlugin/…​, to ROLE_ADMIN; annotations are not an option here because you would not edit plugin code for a change like this.

+
+
+ + + + + +
+ + +
+

When mapping URLs for controllers that are mapped in UrlMappings.groovy, you need to secure the un-url-mapped URLs. For example if you have a FooBarController that you map to /foo/bar/$action, you must register that in controllerAnnotations.staticRules as /foobar/**. This is different than the mapping you would use for the other two approaches and is necessary because controllerAnnotations.staticRules entries are treated as if they were annotations on the corresponding controller.

+
+
+
+
+
+
+

4.5. Static Map

+
+

To use a static map in application.groovy to secure URLs, first specify securityConfigType="InterceptUrlMap":

+
+
+
Listing 12. Specifying securityConfigType as “InterceptUrlMap”
+
+
grails.plugin.springsecurity.securityConfigType = "InterceptUrlMap"
+
+
+
+

Define a Map in application.groovy:

+
+
+
Listing 13. Example grails.plugin.springsecurity.interceptUrlMap
+
+
grails.plugin.springsecurity.interceptUrlMap = [
+   [pattern: '/',               access: ['permitAll']],
+   [pattern: '/error',          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: '/login',          access: ['permitAll']],
+   [pattern: '/login/**',       access: ['permitAll']],
+   [pattern: '/logout',         access: ['permitAll']],
+   [pattern: '/logout/**',      access: ['permitAll']]
+]
+
+
+
+

and add any custom mappings as needed, e.g.

+
+
+
Listing 14. Custom interceptUrlMap mappings
+
+
grails.plugin.springsecurity.interceptUrlMap = [
+   ...
+   [pattern: '/secure/**',  access: ['ROLE_ADMIN']],
+   [pattern: '/finance/**', access: ['ROLE_FINANCE', 'IS_AUTHENTICATED_FULLY']]
+]
+
+
+
+

When using this approach, make sure that you order the rules correctly. The first applicable rule is used, so for example if you have a controller that has one set of rules but an action that has stricter access rules, e.g.

+
+
+
Listing 15. Incorrect interceptUrlMap order
+
+
[pattern: '/secure/**',               access: ['ROLE_ADMIN', 'ROLE_SUPERUSER']],
+[pattern: '/secure/reallysecure/**',  access: ['ROLE_SUPERUSER']]
+
+
+
+

then this would fail - it wouldn’t restrict access to /secure/reallysecure/list to a user with ROLE_SUPERUSER since the first URL pattern matches, so the second would be ignored. The correct mapping would be

+
+
+
Listing 16. Correct interceptUrlMap order
+
+
[pattern: '/secure/reallysecure/**', access: ['ROLE_SUPERUSER']],
+[pattern: '/secure/**',              access: ['ROLE_ADMIN', 'ROLE_SUPERUSER']]
+
+
+
+
+

4.6. Requestmap Instances Stored in the Database

+
+

With this approach you use the Requestmap domain class to store mapping entries in the database. Requestmap has a url property that contains the secured URL pattern and a configAttribute property containing a comma-delimited list of required roles, SpEL expressions, and/or tokens such as IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED, and IS_AUTHENTICATED_ANONYMOUSLY.

+
+
+

To use Requestmap entries, specify securityConfigType="Requestmap":

+
+
+
Listing 17. Specifying securityConfigType as “Requestmap”
+
+
grails.plugin.springsecurity.securityConfigType = "Requestmap"
+
+
+
+

You create Requestmap entries as you create entries in any Grails domain class:

+
+
+
Listing 18. Creating Requestmap entries
+
+
for (String url in [
+      '/', '/error', '/index', '/index.gsp', '/**/favicon.ico', '/shutdown',
+      '/assets/**', '/**/js/**', '/**/css/**', '/**/images/**',
+      '/login', '/login.*', '/login/*',
+      '/logout', '/logout.*', '/logout/*']) {
+   new Requestmap(url: url, configAttribute: 'permitAll').save()
+}
+
+new Requestmap(url: '/profile/**',    configAttribute: 'ROLE_USER').save()
+new Requestmap(url: '/admin/**',      configAttribute: 'ROLE_ADMIN').save()
+new Requestmap(url: '/admin/role/**', configAttribute: 'ROLE_SUPERVISOR').save()
+new Requestmap(url: '/admin/user/**',
+               configAttribute: 'ROLE_ADMIN,ROLE_SUPERVISOR').save()
+new Requestmap(url: '/login/impersonate',
+               configAttribute: 'ROLE_SWITCH_USER,IS_AUTHENTICATED_FULLY').save()
+springSecurityService.clearCachedRequestmaps()
+
+
+
+

The configAttribute value can have a single value or have multiple comma-delimited values. In this example only users with ROLE_ADMIN or ROLE_SUPERVISOR can access /admin/user/** urls, and only users with ROLE_SWITCH_USER can access the switch-user url (/login/impersonate) and in addition must be authenticated fully, i.e. not using a remember-me cookie. Note that when specifying multiple roles, the user must have at least one of them, but when combining IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED, or IS_AUTHENTICATED_ANONYMOUSLY with one or more roles means the user must have one of the roles and satisty the IS_AUTHENTICATED rule.

+
+
+

Unlike the application.groovy Map approach (Static Map), you do not need to revise the Requestmap entry order because the plugin calculates the most specific rule that applies to the current request.

+
+
+

4.6.1. Requestmap Cache

+
+

Requestmap entries are cached for performance, but caching affects runtime configurability. If you create, edit, or delete an instance, the cache must be flushed and repopulated to be consistent with the database. You can call springSecurityService.clearCachedRequestmaps() to do this. For example, if you create a RequestmapController the save action should look like this (and the update and delete actions should similarly call clearCachedRequestmaps()):

+
+
+
Listing 19. Calling clearCachedRequestmaps()
+
+
class RequestmapController {
+
+   def springSecurityService
+
+   ...
+
+   def save(Requestmap requestmap) {
+      if (!requestmap.save(flush: true)) {
+         render view: 'create', model: [requestmapInstance: requestmap]
+         return
+      }
+
+      springSecurityService.clearCachedRequestmaps()
+
+      flash.message = ...
+      redirect action: 'show', id: requestmap.id
+   }
+}
+
+
+
+
+
+

4.7. Using Expressions to Create Descriptive, Fine-Grained Rules

+
+

Spring Security uses the Spring Expression Language (SpEL), which allows you to declare the rules for guarding URLs more descriptively than does the traditional approach, and also allows much more fine-grained rules. Where you traditionally would specify a list of role names and/or special tokens (for example, IS_AUTHENTICATED_FULLY), with Spring Security’s expression support, you can instead use the embedded scripting language to define simple or complex access rules.

+
+
+

You can use expressions with any of the previously described approaches to securing application URLs. For example, consider this annotated controller:

+
+
+
Listing 20. An annotated controller
+
+
package com.yourcompany.yourapp
+
+import grails.plugin.springsecurity.annotation.Secured
+
+class SecureController {
+
+   @Secured("hasRole('ROLE_ADMIN')")
+   def someAction() {
+      ...
+   }
+
+   @Secured("authentication.name == 'ralph'")
+   def someOtherAction() {
+      ...
+   }
+}
+
+
+
+

In this example, someAction requires ROLE_ADMIN, and someOtherAction requires that the user be logged in with username “ralph”.

+
+
+

The corresponding Requestmap URLs would be

+
+
+
Listing 21. Creating Requestmap instances
+
+
new Requestmap(url: "/secure/someAction",
+               configAttribute: "hasRole('ROLE_ADMIN')").save()
+
+new Requestmap(url: "/secure/someOtherAction",
+               configAttribute: "authentication.name == 'ralph'").save()
+
+
+
+

and the corresponding static mappings would be

+
+
+
Listing 22. Adding mappings in grails.plugin.springsecurity.interceptUrlMap
+
+
grails.plugin.springsecurity.interceptUrlMap = [
+   [pattern: '/secure/someAction',      access: ["hasRole('ROLE_ADMIN')"]],
+   [pattern: '/secure/someOtherAction', access: ["authentication.name == 'ralph'"]]
+]
+
+
+
+

The Spring Security docs have a table listing the standard expressions, which is copied here for reference:

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 6. Spring Security expressions
ExpressionDescription

hasRole(role)

Returns true if the current principal has the specified role

hasAnyRole([role1,role2])

Returns true if the current principal has any of the supplied roles (given as a comma-separated list of strings)

principal

Allows direct access to the principal object representing the current user

authentication

Allows direct access to the current Authentication object obtained from the SecurityContext

permitAll

Always evaluates to true

denyAll

Always evaluates to false

isAnonymous()

Returns true if the current principal is an anonymous user

isRememberMe()

Returns true if the current principal is a remember-me user

isAuthenticated()

Returns true if the user is not anonymous

isFullyAuthenticated()

Returns true if the user is not an anonymous or a remember-me user

request

the HTTP request, allowing expressions such as “isFullyAuthenticated() or request.getMethod().equals('OPTIONS')”

+
+

In addition, you can use a web-specific expression hasIpAddress. However, you may find it more convenient to separate IP restrictions from role restrictions by using the IP address filter (IP Address Restrictions).

+
+
+

To help you migrate traditional configurations to expressions, this table compares various configurations and their corresponding expressions:

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 7. Traditional configurations and associated expressions
Traditional ConfigExpression

ROLE_ADMIN

hasRole('ROLE_ADMIN')

ROLE_USER,ROLE_ADMIN

hasAnyRole('ROLE_USER','ROLE_ADMIN')

ROLE_ADMIN,IS_AUTHENTICATED_FULLY

hasRole('ROLE_ADMIN') and isFullyAuthenticated()

IS_AUTHENTICATED_ANONYMOUSLY

permitAll

IS_AUTHENTICATED_REMEMBERED

isAuthenticated() or isRememberMe()

IS_AUTHENTICATED_FULLY

isFullyAuthenticated()

+
+
+
+
+

5. Helper Classes

+
+
+

Use the plugin helper classes in your application to avoid dealing with some lower-level details of Spring Security.

+
+
+

5.1. SecurityTagLib

+
+

The plugin includes GSP tags to support conditional display based on whether the user is authenticated, and/or has the required role to perform a particular action. These tags are in the sec namespace and are implemented in grails.plugin.springsecurity.SecurityTagLib.

+
+
+

5.1.1. ifLoggedIn

+
+

Displays the inner body content if the user is authenticated.

+
+
+

Example:

+
+
+
Listing 23. Example using <sec:ifLoggedIn>
+
+
<sec:ifLoggedIn>
+Welcome Back!
+</sec:ifLoggedIn>
+
+
+
+
+

5.1.2. ifNotLoggedIn

+
+

Displays the inner body content if the user is not authenticated.

+
+
+

Example:

+
+
+
Listing 24. Example using <sec:ifNotLoggedIn>
+
+
<sec:ifNotLoggedIn>
+<g:link controller='login' action='auth'>Login</g:link>
+</sec:ifNotLoggedIn>
+
+
+
+
+

5.1.3. ifAllGranted

+
+

Displays the inner body content only if all of the listed roles are granted.

+
+
+

Example:

+
+
+
Listing 25. Example using <sec:ifAllGranted>
+
+
<sec:ifAllGranted roles='ROLE_ADMIN,ROLE_SUPERVISOR'>
+...
+secure stuff here
+...
+</sec:ifAllGranted>
+
+
+
+
+

5.1.4. ifAnyGranted

+
+

Displays the inner body content if at least one of the listed roles are granted.

+
+
+

Example:

+
+
+
Listing 26. Example using <sec:ifAnyGranted>
+
+
<sec:ifAnyGranted roles='ROLE_ADMIN,ROLE_SUPERVISOR'>
+...
+secure stuff here
+...
+</sec:ifAnyGranted>
+
+
+
+
+

5.1.5. ifNotGranted

+
+

Displays the inner body content if none of the listed roles are granted.

+
+
+

Example:

+
+
+
Listing 27. Example using <sec:ifNotGranted>
+
+
<sec:ifNotGranted roles='ROLE_USER'>
+...
+non-user stuff here
+...
+</sec:ifNotGranted>
+
+
+
+
+

5.1.6. loggedInUserInfo

+
+

Displays the value of the specified UserDetails property if logged in. For example, to show the username property:

+
+
+
Listing 28. Example using <sec:loggedInUserInfo>
+
+
<sec:loggedInUserInfo field='username'/>
+
+
+
+

If you have customized the UserDetails (e.g. with a custom UserDetailsService) to add a fullName property, you access it as follows:

+
+
+
Listing 29. Example using <sec:loggedInUserInfo> for a nonstandard property
+
+
Welcome Back <sec:loggedInUserInfo field='fullName'/>
+
+
+
+
+

5.1.7. username

+
+

Displays the value of the UserDetails username property if logged in.

+
+
+
Listing 30. Example using <sec:username>
+
+
<sec:ifLoggedIn>
+Welcome Back <sec:username/>!
+</sec:ifLoggedIn>
+<sec:ifNotLoggedIn>
+<g:link controller='login' action='auth'>Login</g:link>
+</sec:ifNotLoggedIn>
+
+
+
+
+

5.1.8. ifSwitched

+
+

Displays the inner body content only if the current user switched from another user. (See also Switch User.)

+
+
+
Listing 31. Example using <sec:ifSwitched> and <sec:ifNotSwitched>
+
+
<sec:ifLoggedIn>
+Logged in as <sec:username/>
+</sec:ifLoggedIn>
+
+<sec:ifSwitched>
+    <form action='${request.contextPath}/logout/impersonate' method='POST'>
+        <input type='submit' value="Resume as ${grails.plugin.springsecurity.SpringSecurityUtils.switchedUserOriginalUsername}"/>
+    </form>
+</sec:ifSwitched>
+
+<sec:ifNotSwitched>
+
+   <sec:ifAllGranted roles='ROLE_SWITCH_USER'>
+
+   <form action='${request.contextPath}/login/impersonate'
+         method='POST'>
+
+      Switch to user: <input type='text' name='username'/><br/>
+
+      <input type='submit' value='Switch'/> </form>
+
+   </sec:ifAllGranted>
+
+</sec:ifNotSwitched>
+
+
+
+
+

5.1.9. ifNotSwitched

+
+

Displays the inner body content only if the current user has not switched from another user.

+
+
+
+

5.1.10. switchedUserOriginalUsername

+
+

Renders the original user’s username if the current user switched from another user.

+
+
+
Listing 32. Example using <sec:switchedUserOriginalUsername>
+
+
<sec:ifSwitched>
+    <form action='${request.contextPath}/logout/impersonate' method='POST'>
+        <input type='submit' value="Resume as ${grails.plugin.springsecurity.SpringSecurityUtils.switchedUserOriginalUsername}"/>
+    </form>
+</sec:ifSwitched>
+
+
+
+
+

5.1.11. access

+
+

Renders the body if the specified expression evaluates to true or specified URL is allowed.

+
+
+
Listing 33. Example using <sec:access> with an expression
+
+
<sec:access expression="hasRole('ROLE_USER')">
+
+You're a user
+
+</sec:access>
+
+
+
+
Listing 34. Example using <sec:access> with a URL
+
+
<sec:access url='/admin/user'>
+
+<g:link controller='admin' action='user'>Manage Users</g:link>
+
+</sec:access>
+
+
+
+

You can also guard access to links generated from controller and action names or named URL mappings instead of hard-coding the values, for example

+
+
+
Listing 35. Example using <sec:access> with a controller and action
+
+
<sec:access controller='admin' action='user'>
+
+<g:link controller='admin' action='user'>Manage Users</g:link>
+
+</sec:access>
+
+
+
+

or if you have a named URL mapping you can refer to that:

+
+
+
Listing 36. Example using <sec:access> with a URL mapping
+
+
<sec:access mapping='manageUsers'>
+
+<g:link mapping='manageUsers'>Manage Users</g:link>
+
+</sec:access>
+
+
+
+

For even more control of the generated URL (still avoiding hard-coding) you can use createLink to build the URL, for example

+
+
+
Listing 37. Example using <sec:access> with <g:createLink>
+
+
<sec:access url='${createLink(controller: 'admin', action: 'user', base: '/')}'>
+
+<g:link controller='admin' action='user'>Manage Users</g:link>
+
+</sec:access>
+
+
+
+

Be sure to include the base: '/' attribute in this case to avoid appending the context name to the URL.

+
+
+
+

5.1.12. noAccess

+
+

Renders the body if the specified expression evaluates to false or URL isn’t allowed.

+
+
+
Listing 38. Example using <sec:noAccess>
+
+
<sec:noAccess expression="hasRole('ROLE_USER')">
+
+You're not a user
+
+</sec:noAccess>
+
+
+
+
+ +
+

A wrapper around the standard Grails link tag that renders if the specified expression evaluates to true or URL is allowed.

+
+
+

To define the expression to evaluate within the tag itself:

+
+
+
Listing 39. Example using <sec:link> with an expression
+
+
<sec:link controller='myController' action='myAction' expression="hasRole('ROLE_USER')">My link text</sec:link>
+
+
+
+

To use access controls defined, for example, in the interceptUrlMap:

+
+
+
Listing 40. Example using <sec:link> without an expression
+
+
<sec:link controller='myController' action='myAction'>My link text</sec:link>
+
+
+
+

By default, nothing will be rendered if the specified expression evaluates to false or URL is not allowed. To render only the text that would have been linked, set the fallback attribute:

+
+
+
Listing 41. Example using <sec:link fallback='true'> without an expression
+
+
<sec:link controller='myController' action='myAction' fallback='true'>This text will display but won't be linked if the user doesn't have access</sec:link>
+
+
+
+
+
+

5.2. SpringSecurityService

+
+

grails.plugin.springsecurity.SpringSecurityService provides security utility functions. It is a regular Grails service, so you use dependency injection to inject it into a controller, service, taglib, and so on:

+
+
+
+
def springSecurityService
+
+
+
+

5.2.1. getCurrentUser()

+
+

Retrieves a domain class instance for the currently authenticated user. During authentication a user/person domain class instance is retrieved to get the user’s password, roles, etc. and the id of the instance is saved. This method uses the id and the domain class to re-load the instance, or the username if the UserDetails instance is not a GrailsUser.

+
+
+

If you do not need domain class data other than the id, you should use the loadCurrentUser method instead.

+
+
+

Example:

+
+
+
Listing 42. Example using getCurrentUser()
+
+
class SomeController {
+
+   def springSecurityService
+
+   def someAction() {
+      def user = springSecurityService.currentUser
+      ...
+   }
+}
+
+
+
+
+

5.2.2. loadCurrentUser()

+
+

Often it is not necessary to retrieve the entire domain class instance, for example when using it in a query where only the id is needed as a foreign key. This method uses the GORM load method to create a proxy instance. This will never be null, but can be invalid if the id doesn’t correspond to a row in the database, although this is very unlikely in this scenario because the instance would have been there during authentication.

+
+
+

If you need other data than just the id, use the getCurrentUser method instead.

+
+
+

Example:

+
+
+
Listing 43. Example using loadCurrentUser()
+
+
class SomeController {
+
+   def springSecurityService
+
+   def someAction(Long id) {
+      def user = springSecurityService.isLoggedIn() ?
+            springSecurityService.loadCurrentUser() :
+            null
+      if (user) {
+         CreditCard card = CreditCard.findByIdAndUser(id, user)
+         ...
+      }
+      ...
+   }
+}
+
+
+
+
+

5.2.3. isLoggedIn()

+
+

Checks whether there is a currently logged-in user.

+
+
+

Example:

+
+
+
Listing 44. Example using isLoggedIn()
+
+
class SomeController {
+
+   def springSecurityService
+
+   def someAction() {
+      if (springSecurityService.isLoggedIn()) {
+         ...
+      }
+      else {
+         ...
+      }
+   }
+}
+
+
+
+
+

5.2.4. getAuthentication()

+
+

Retrieves the current user’s Authentication. If authenticated, this will typically be a UsernamePasswordAuthenticationToken.

+
+
+

If not authenticated and the AnonymousAuthenticationFilter is active (true by default) then the anonymous user’s authentication will be returned. This will be an instance of grails.plugin.springsecurity.authentication.GrailsAnonymousAuthenticationToken with a standard org.springframework.security.core.userdetails.User instance as its Principal. The authentication will have a single granted role, ROLE_ANONYMOUS.

+
+
+

Example:

+
+
+
Listing 45. Example using getAuthentication()
+
+
class SomeController {
+
+   def springSecurityService
+
+   def someAction() {
+      def auth = springSecurityService.authentication
+      String username = auth.username
+      def authorities = auth.authorities // a Collection of GrantedAuthority
+      boolean authenticated = auth.authenticated
+      ...
+   }
+}
+
+
+
+
+

5.2.5. getPrincipal()

+
+

Retrieves the currently logged in user’s Principal. If authenticated, the principal will be a grails.plugin.springsecurity.userdetails.GrailsUser, unless you have created a custom UserDetailsService, in which case it will be whatever implementation of UserDetails you use there.

+
+
+

If not authenticated and the AnonymousAuthenticationFilter is active (true by default) then a standard org.springframework.security.core.userdetails.User is used.

+
+
+

Example:

+
+
+
Listing 46. Example using getPrincipal()
+
+
class SomeController {
+
+   def springSecurityService
+
+   def someAction() {
+      def principal = springSecurityService.principal
+      String username = principal.username
+      def authorities = principal.authorities // a Collection of GrantedAuthority
+      boolean enabled = principal.enabled
+      ...
+   }
+}
+
+
+
+
+

5.2.6. encodePassword()

+
+

Hashes a password with the configured hashing scheme. By default the plugin uses bcrypt, but you can configure the scheme with the grails.plugin.springsecurity.password.algorithm attribute in application.groovy. The supported values are ‘bcrypt’ to use bcrypt, ‘pbkdf2’ to use PBKDF2, or any message digest algorithm that is supported in your JDK; see this Java page for the available algorithms.

+
+
+ + + + + +
+ + +
+

You are strongly discouraged from using MD5 or SHA-1 algorithms because of their well-known vulnerabilities. You should also use a salt for your passwords, which greatly increases the computational complexity of computing passwords if your database gets compromised. See Salted Passwords.

+
+
+
+
+

Example:

+
+
+
Listing 47. Example using encodePassword()
+
+
class PersonController {
+
+   def springSecurityService
+
+   def updateAction(Person person) {
+
+      params.salt = person.salt
+      if (person.password != params.password) {
+         params.password = springSecurityService.encodePassword(password, salt)
+         def salt = ... // e.g. randomly generated using some utility method
+         params.salt = salt
+      }
+      person.properties = params
+      if (!person.save(flush: true)) {
+         render view: 'edit', model: [person: person]
+         return
+      }
+      redirect action: 'show', id: person.id
+   }
+}
+
+
+
+ + + + + +
+ + +
+

If you are hashing the password in an PersistenceEventListener or in the User domain class (using beforeInsert and encodePassword) then don’t call springSecurityService.encodePassword() in your controller since you’ll double-hash the password and users won’t be able to log in. It’s best to encapsulate the password handling logic in a single point.

+
+
+
+
+
+

5.2.7. updateRole()

+
+

Updates a role and, if you use Requestmap instances to secure URLs, updates the role name in all affected Requestmap definitions if the name was changed.

+
+
+

Example:

+
+
+
Listing 48. Example using updateRole()
+
+
class RoleController {
+
+   def springSecurityService
+
+   def update(Role role) {
+      if (!springSecurityService.updateRole(role, params)) {
+         render view: 'edit', model: [roleInstance: role]
+         return
+      }
+
+      flash.message = "The role was updated"
+      redirect action: show, id: role.id
+   }
+}
+
+
+
+
+

5.2.8. deleteRole()

+
+

Deletes a role and, if you use Requestmap instances to secure URLs, removes the role from all affected Requestmap definitions. If a Requestmap's config attribute is only the role name (for example, [pattern: '/foo/bar', access: 'ROLE_FOO']), it is deleted.

+
+
+

Example:

+
+
+
Listing 49. Example using deleteRole()
+
+
class RoleController {
+
+   def springSecurityService
+
+   def delete(Role role) {
+      try {
+         springSecurityService.deleteRole role
+         flash.message = "The role was deleted"
+         redirect action: list
+      }
+      catch (DataIntegrityViolationException e) {
+         flash.message = "Unable to delete the role"
+         redirect action: show, id: params.id
+      }
+   }
+}
+
+
+
+
+

5.2.9. clearCachedRequestmaps()

+
+

Flushes the Requestmaps cache and triggers a complete reload. If you use Requestmap instances to secure URLs, the plugin loads and caches all Requestmap instances as a performance optimization. This action saves database activity because the requestmaps are checked for each request. Do not allow the cache to become stale. When you create, edit or delete a Requestmap, flush the cache. Both updateRole() and deleteRole() call clearCachedRequestmaps()for you. Call this method when you create a new Requestmap or do other Requestmap work that affects the cache.

+
+
+

Example:

+
+
+
Listing 50. Example using clearCachedRequestmaps()
+
+
class RequestmapController {
+
+   def springSecurityService
+
+   def save(Requestmap requestmap) {
+      if (!requestmap.save(flush: true)) {
+         render view: 'create', model: [requestmapInstance: requestmap]
+         return
+      }
+
+      springSecurityService.clearCachedRequestmaps()
+      flash.message = "Requestmap created"
+      redirect action: show, id: requestmap.id
+   }
+}
+
+
+
+
+

5.2.10. reauthenticate()

+
+

Rebuilds an Authentication for the given username and registers it in the security context. You typically use this method after updating a user’s authorities or other data that is cached in the Authentication or Principal. It also removes the user from the user cache to force a refresh at next login.

+
+
+

Example:

+
+
+
Listing 51. Example using reauthenticate()
+
+
class UserController {
+
+   def springSecurityService
+
+   def update(User user) {
+
+      params.salt = user.salt
+      if (params.password) {
+         params.password = springSecurityService.encodePassword(params.password, salt)
+         def salt = ... // e.g. randomly generated using some utility method
+         params.salt = salt
+      }
+      user.properties = params
+      if (!user.save(flush: true)) {
+         render view: 'edit', model: [userInstance: user]
+         return
+      }
+
+      if (springSecurityService.loggedIn &&
+             springSecurityService.principal.username == user.username) {
+         springSecurityService.reauthenticate user.username
+      }
+
+      flash.message = "The user was updated"
+      redirect action: show, id: user.id
+   }
+}
+
+
+
+
+
+

5.3. SpringSecurityUtils

+
+

grails.plugin.springsecurity.SpringSecurityUtils is a utility class with static methods that you can call directly without using dependency injection. It is primarily an internal class but can be called from application code.

+
+
+

5.3.1. authoritiesToRoles()

+
+

Extracts role names from an array or Collection of GrantedAuthority.

+
+
+
+

5.3.2. getPrincipalAuthorities()

+
+

Retrieves the currently logged-in user’s authorities. It is empty (but never null) if the user is not logged in.

+
+
+
+

5.3.3. parseAuthoritiesString()

+
+

Splits a comma-delimited String containing role names into a List of GrantedAuthority.

+
+
+
+

5.3.4. ifAllGranted()

+
+

Checks whether the current user has all specified roles (a comma-delimited String of role names). Primarily used by SecurityTagLib.ifAllGranted.

+
+
+
+

5.3.5. ifNotGranted()

+
+

Checks whether the current user has none of the specified roles (a comma-delimited String of role names). Primarily used by SecurityTagLib.ifNotGranted.

+
+
+
+

5.3.6. ifAnyGranted()

+
+

Checks whether the current user has any of the specified roles (a comma-delimited String of role names). Primarily used by SecurityTagLib.ifAnyGranted.

+
+
+
+

5.3.7. getSecurityConfig()

+
+

Retrieves the security part of the Configuration (from grails-app/conf/application.groovy merged with the plugin’s default configuration).

+
+
+
+

5.3.8. loadSecondaryConfig()

+
+

Used by dependent plugins to add configuration attributes.

+
+
+
+

5.3.9. reloadSecurityConfig()

+
+

Forces a reload of the security configuration.

+
+
+
+

5.3.10. isAjax()

+
+

Checks whether the request was triggered by an Ajax call. The standard way is to determine whether X-Requested-With request header is set and has the value XMLHttpRequest. In addition, you can configure the name of the header with the grails.plugin.springsecurity.ajaxHeader configuration attribute, but this is not recommended because all major JavaScript toolkits use the standard name. Further, you can register a closure in application.groovy with the name ajaxCheckClosure that will be used to check if a request is an Ajax request. It is passed the request as its single argument, e.g.

+
+
+
Listing 52. Customizing Ajax detection with grails.plugin.springsecurity.ajaxCheckClosure
+
+
grails.plugin.springsecurity.ajaxCheckClosure = { request ->
+   // return true or false
+}
+
+
+
+

You can also force the request to be treated as Ajax by appending &ajax=true to your request query string.

+
+
+
+

5.3.11. registerProvider()

+
+

Used by dependent plugins to register an AuthenticationProvider bean name.

+
+
+
+

5.3.12. registerFilter()

+
+

Used by dependent plugins to register a filter bean name in a specified position in the filter chain.

+
+
+
+

5.3.13. isSwitched()

+
+

Checks whether the current user switched from another user.

+
+
+
+

5.3.14. getSwitchedUserOriginalUsername()

+
+

Gets the original user’s username if the current user switched from another user.

+
+
+
+

5.3.15. doWithAuth()

+
+

Executes a Closure with the current authentication. The one-parameter version which takes just a Closure assumes that there’s an authentication in the HTTP Session and that the Closure is running in a separate thread from the web request, so the SecurityContext and Authentication aren’t available to the standard ThreadLocal. This is primarily of use when you explicitly launch a new thread from a controller action or service called in request scope, not from a Quartz job which isn’t associated with an authentication in any thread.

+
+
+

The two-parameter version takes a username and a Closure to authenticate as. This is will authenticate as the specified user and execute the closure with that authentication. It restores the authentication to the one that was active if it exists, or clears the context otherwise. This is similar to run-as and switch-user but is only local to the Closure.

+
+
+
+
+
+
+

6. Events

+
+
+

Spring Security fires application events after various security-related actions such as successful login, unsuccessful login, and so on. Spring Security uses two main event classes, AbstractAuthenticationEvent and AbstractAuthorizationEvent.

+
+
+

6.1. Event Notification

+
+

You can set up event notifications in two ways. The sections that follow describe each approach in more detail.

+
+
+
    +
  • +

    Register an event listener, ignoring events that do not interest you. Spring allows only partial event subscription; you use generics to register the class of events that interest you, and you are notified of that class and all subclasses.

    +
  • +
  • +

    Register one or more callback closures in grails-app/conf/application.groovy that take advantage of the plugin’s grails.plugin.springsecurity.SecurityEventListener. The listener does the filtering for you.

    +
  • +
+
+
+

6.1.1. AuthenticationEventPublisher

+
+

Spring Security publishes events using an AuthenticationEventPublisher which in turn fire events using the ApplicationEventPublisher. By default no events are fired since the AuthenticationEventPublisher instance registered is a grails.plugin.springsecurity.authentication.NullAuthenticationEventPublisher. But you can enable event publishing by setting grails.plugin.springsecurity.useSecurityEventListener = true in grails-app/conf/application.groovy.

+
+
+

You can use the useSecurityEventListener setting to temporarily disable and enable the callbacks, or enable them per-environment.

+
+
+
+

6.1.2. UsernameNotFoundException

+
+

Most authentication exceptions trigger an event with a similar name as described in this table:

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 8. Exceptions and associated events
ExceptionEvent

AccountExpiredException

AuthenticationFailureExpiredEvent

AuthenticationServiceException

AuthenticationFailureServiceExceptionEvent

LockedException

AuthenticationFailureLockedEvent

CredentialsExpiredException

AuthenticationFailureCredentialsExpiredEvent

DisabledException

AuthenticationFailureDisabledEvent

BadCredentialsException

AuthenticationFailureBadCredentialsEvent

UsernameNotFoundException

AuthenticationFailureBadCredentialsEvent

ProviderNotFoundException

AuthenticationFailureProviderNotFoundEvent

+
+

This holds for all exceptions except UsernameNotFoundException which triggers an AuthenticationFailureBadCredentialsEvent just like a BadCredentialsException. This is a good idea since it doesn’t expose extra information - there’s no differentiation between a bad password and a missing user. In addition, by default a missing user will trigger a BadCredentialsException for the same reasons. You can configure Spring Security to re-throw the original UsernameNotFoundException instead of converting it to a BadCredentialsException by setting grails.plugin.springsecurity.dao.hideUserNotFoundExceptions = false in grails-app/conf/application.groovy.

+
+
+

Fortunately all subclasses of AbstractAuthenticationFailureEvent have a getException() method that gives you access to the exception that triggered the event, so you can use that to differentiate between a bad password and a missing user (if hideUserNotFoundExceptions=false).

+
+
+
+
+

6.2. Registering an Event Listener

+
+

Enable events with grails.plugin.springsecurity.useSecurityEventListener = true and create one or more Groovy or Java classes, for example:

+
+
+
MySecurityEventListener.groovy
+
+
package com.foo.bar
+
+import org.springframework.context.ApplicationListener
+import org.springframework.security.authentication.event.AuthenticationSuccessEvent
+
+class MySecurityEventListener
+      implements ApplicationListener<AuthenticationSuccessEvent> {
+
+   void onApplicationEvent(AuthenticationSuccessEvent event) {
+      // handle the event
+   }
+}
+
+
+
+

Register the class in grails-app/conf/spring/resources.groovy:

+
+
+
Listing 53. Registration of the event listener bean in resources.groovy
+
+
import com.foo.bar.MySecurityEventListener
+
+beans = {
+   mySecurityEventListener(MySecurityEventListener)
+}
+
+
+
+
+

6.3. Registering Callback Closures

+
+

Alternatively, enable events with grails.plugin.springsecurity.useSecurityEventListener = true and register one or more callback closure(s) in grails-app/conf/application.groovy and let SecurityEventListener do the filtering.

+
+
+

Implement the event handlers that you need, for example:

+
+
+
Listing 54. Adding event handling closures in application.groovy
+
+
grails.plugin.springsecurity.useSecurityEventListener = true
+
+grails.plugin.springsecurity.onInteractiveAuthenticationSuccessEvent = { e, appCtx ->
+   // handle InteractiveAuthenticationSuccessEvent
+}
+
+grails.plugin.springsecurity.onAbstractAuthenticationFailureEvent = { e, appCtx ->
+   // handle AbstractAuthenticationFailureEvent
+}
+
+grails.plugin.springsecurity.onAuthenticationSuccessEvent = { e, appCtx ->
+   // handle AuthenticationSuccessEvent
+}
+
+grails.plugin.springsecurity.onAuthenticationSwitchUserEvent = { e, appCtx ->
+   // handle AuthenticationSwitchUserEvent
+}
+
+grails.plugin.springsecurity.onAuthorizationEvent = { e, appCtx ->
+   // handle AuthorizationEvent
+}
+
+
+
+

None of these closures are required; if none are configured, nothing will be called. Just implement the event handlers that you need.

+
+
+ + + + + +
+ + +
+

When a user authenticates, Spring Security initially fires an AuthenticationSuccessEvent. This event fires before the Authentication is registered in the SecurityContextHolder, which means that the springSecurityService methods that access the logged-in user will not work. Later in the processing a second event is fired, an InteractiveAuthenticationSuccessEvent, and when this happens the SecurityContextHolder will have the Authentication. Depending on your needs, you can implement a callback for either or both events.

+
+
+
+
+
+
+
+

7. User, Authority (Role), and Requestmap Properties

+
+
+

Properties you are most likely to override are the User and Authority (and Requestmap if you use the database to store mappings) class and property names.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 9. Domain class configuration options
PropertyDefault ValueMeaning

userLookup.userDomainClassName

none

User class name

userLookup.usernamePropertyName

“username”

User class username property

userLookup.usernameIgnoreCase

“false”

Ignore case when searching for usernamePropertyName

userLookup.passwordPropertyName

“password”

User class password property

userLookup.authoritiesPropertyName

“authorities”

User class role collection property

userLookup.enabledPropertyName

“enabled”

User class enabled property

userLookup.accountExpiredPropertyName

“accountExpired”

User class account expired property

userLookup.accountLockedPropertyName

“accountLocked”

User class account locked property

userLookup.passwordExpiredPropertyName

“passwordExpired”

User class password expired property

userLookup.authorityJoinClassName

none

User/Role many-many join class name

authority.className

none

Role class name

authority.nameField

“authority”

Role class role name property

requestMap.className

none

Requestmap class name

requestMap.urlField

“url”

Requestmap class URL pattern property

requestMap.configAttributeField

“configAttribute”

Requestmap class role/token property

+
+
+
+

8. Authentication

+
+
+

The Spring Security plugin supports several approaches to authentication.

+
+
+

The default approach stores users and roles in your database, and uses an HTML login form which prompts the user for a username and password. The plugin also supports other approaches as described in the sections below, as well as add-on plugins that provide external authentication providers such as LDAP, and single sign-on using CAS

+
+
+

8.1. Basic and Digest Authentication

+
+

To use HTTP Basic Authentication in your application, set the useBasicAuth attribute to true. Also change the basic.realmName default value to one that suits your application, for example:

+
+
+
Listing 55. Basic Authentication example settings
+
+
grails.plugin.springsecurity.useBasicAuth = true
+grails.plugin.springsecurity.basic.realmName = "Ralph's Bait and Tackle"
+
+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 10. Basic Authentication configuration options
PropertyDefaultDescription

useBasicAuth

false

Whether to use Basic authentication

basic.realmName

“Grails Realm”

Realm name displayed in the browser authentication popup

basic.credentialsCharset

“UTF-8”

The character set used to decode Base64-encoded data

+
+

With this authentication in place, users are prompted with the standard browser login dialog instead of being redirected to a login page.

+
+
+

If you don’t want all of your URLs guarded by Basic authentication, you can partition the URL patterns and apply Basic authentication to some, but regular form login to others. For example, if you have a web service that uses Basic authentication for /webservice/** URLs, you would configure that using the chainMap config attribute:

+
+
+
Listing 56. Example filter chain mappings for Basic authentication
+
+
grails.plugin.springsecurity.filterChain.chainMap = [
+   [pattern: '/webservice/**', filters: 'JOINED_FILTERS,-exceptionTranslationFilter'],
+   [pattern: '/**',            filters: 'JOINED_FILTERS,-basicAuthenticationFilter,-basicExceptionTranslationFilter']
+]
+
+
+
+

In this example we’re using the JOINED_FILTERS keyword instead of explicitly listing the filter names. Specifying JOINED_FILTERS means to use all of the filters that were configured using the various config options. In each case we also specify that we want to exclude one or more filters by prefixing their names with -.

+
+
+

For the /webservice/** URLs, we want all filters except for the standard ExceptionTranslationFilter since we want to use just the one configured for Basic Auth. And for the /** URLs (everything else) we want everything except for the Basic authentication filter and its configured ExceptionTranslationFilter.

+
+
+

Digest Authentication is similar to Basic but is more secure because it does not send your password in obfuscated cleartext. Digest resembles Basic in practice - you get the same browser popup dialog when you authenticate. But because the credential transfer is genuinely hashed (instead of just Base64-encoded as with Basic authentication) you do not need SSL to guard your logins.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 11. Digest Authentication configuration options
PropertyDefault ValueMeaning

useDigestAuth

false

Whether to use Digest authentication

digest.realmName

“Grails Realm”

Realm name displayed in the browser popup

digest.key

“changeme”

Key used to build the nonce for authentication; it should be changed but that’s not required

digest.nonceValiditySeconds

300

How long a nonce stays valid

digest.passwordAlreadyEncoded

false

Whether you are managing the password hashing yourself

digest.createAuthenticatedToken

false

If true, creates an authenticated UsernamePasswordAuthenticationToken to avoid loading the user from the database twice. However, this process skips the isAccountNonExpired(), isAccountNonLocked(), isCredentialsNonExpired(), and isEnabled() checks, so it is not advised.

digest.useCleartextPasswords

false

If true, a cleartext password encoder is used (not recommended). If false, passwords hashed by DigestAuthPasswordEncoder are stored in the database

+
+

Digest authentication has a problem in that by default you store cleartext passwords in your database. This is because the browser hashes your password along with the username and Realm name, and this is compared to the password hashed using the same algorithm during authentication. The browser does not know about your MessageDigest algorithm or salt source, so to hash them the same way you need to load a cleartext password from the database.

+
+
+

The plugin does provide an alternative, although it has no configuration options (in particular the digest algorithm cannot be changed). If digest.useCleartextPasswords is false (the default), then the passwordEncoder bean is replaced with an instance of grails.plugin.springsecurity.authentication.encoding.DigestAuthPasswordEncoder. This encoder uses the same approach as the browser, that is, it combines your password along with your username and Realm name essentially as a salt, and hashes with MD5. MD5 is not recommended in general, but given the typical size of the salt it is reasonably safe to use.

+
+
+

The only required attribute is useDigestAuth, which you must set to true, but you probably also want to change the realm name:

+
+
+
+
grails.plugin.springsecurity.useDigestAuth = true
+grails.plugin.springsecurity.digest.realmName = "Ralph's Bait and Tackle"
+
+
+
+

Digest authentication cannot be applied to a subset of URLs like Basic authentication can. This is due to the password encoding issues. So you cannot use the chainMap attribute here - all URLs will be guarded.

+
+
+ + + + + +
+ + +
+

Note that since the Digest authentication password encoder is different from the typical encoders you must pass the username as the “salt” value. The code in the generated User class assumes you’re not using a salt value, so you’ll need to change the code in encodePassword() from

+
+
+
+
password = springSecurityService.encodePassword(password)
+
+
+
+

to

+
+
+
+
password = springSecurityService.encodePassword(password, username)
+
+
+
+
+
+
+

8.2. Certificate (X.509) Login Authentication

+
+

Another authentication mechanism supported by Spring Security is certificate-based, or “mutual authentication”. It requires HTTPS, and you must configure the server to require a client certificate (ordinarily only the server provides a certificate). Your username is extracted from the client certificate if it is valid, and you are “pre-authenticated”. As long as a corresponding username exists in the database, your authentication succeeds and you are not asked for a password. Your Authentication contains the authorities associated with your username.

+
+
+

The table describes available configuration options.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 12. X.509 configuration options
PropertyDefault ValueMeaning

useX509

false

Whether to support certificate-based logins

x509.continueFilterChainOnUnsuccessfulAuthentication

true

Whether to proceed when an authentication attempt fails to allow other authentication mechanisms to process the request

x509.subjectDnRegex

“CN=(.*?)(?:,|$)”

Regular expression for extracting the username from the certificate’s subject name

x509.checkForPrincipalChanges

false

Whether to re-extract the username from the certificate and check that it’s still the current user when a valid Authentication already exists

x509.invalidateSessionOnPrincipalChange

true

Whether to invalidate the session if the principal changed (based on a checkForPrincipalChanges check)

x509.subjectDnClosure

none

If set, the plugin’s ClosureX509PrincipalExtractor class is used to extract information from the X.509 certificate using the specified closure

x509.throwExceptionWhenTokenRejected

false

If true thrown a BadCredentialsException

+
+

The details of configuring your server for SSL and configuring browser certificates are beyond the scope of this document. If you use Tomcat, see its SSL documentation. To get a test environment working, see the instructions in this discussion at Stack Overflow.

+
+
+
+

8.3. Remember-Me Cookie

+
+

Spring Security supports creating a remember-me cookie so that users are not required to log in with a username and password for each session. This is optional and is usually implemented as a checkbox on the login form; the default auth.gsp supplied by the plugin has this feature.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 13. Remember-me configuration options
PropertyDefault ValueMeaning

rememberMe.cookieName

grails_remember_me

remember-me cookie name; should be unique per application

rememberMe.cookieDomain

none

remember-me cookie domain

rememberMe.alwaysRemember

false

If true, create a remember-me cookie even if no checkbox is on the form

rememberMe.tokenValiditySeconds

1209600 (14 days)

Max age of the cookie in seconds

rememberMe.parameter

remember-me

Login form remember-me checkbox name

rememberMe.key

grailsRocks

Value used to encode cookies; should be unique per application

rememberMe.useSecureCookie

none

Whether to use a secure cookie or not; if true a secure cookie is created, if false a non-secure cookie is created, and if not set, a secure cookie is created if the request used HTTPS

rememberMe.createSessionOnSuccess

true

Whether to create a session of one doesn’t exist to ensure that the Authentication is stored for future requests

rememberMe.persistent

false

If true, stores persistent login information in the database

rememberMe.persistentToken.domainClassName

none

Domain class used to manage persistent logins

rememberMe.persistentToken.seriesLength

16

Number of characters in the cookie’s series attribute

rememberMe.persistentToken.tokenLength

16

Number of characters in the cookie’s token attribute

atr.rememberMeClass

RememberMeAuthenticationToken

remember-me authentication class

+
+

You are most likely to change these attributes:

+
+
+
    +
  • +

    rememberMe.cookieName. Purely aesthetic as most users will not look at their cookies, but you probably want the display name to be application-specific rather than “grails_remember_me”.

    +
  • +
  • +

    rememberMe.key. Part of a salt when the cookie is hashed. Changing the default makes it harder to execute brute-force attacks.

    +
  • +
  • +

    rememberMe.tokenValiditySeconds. Default is two weeks; set it to what makes sense for your application.

    +
  • +
+
+
+

8.3.1. Persistent Logins

+
+

The remember-me cookie is very secure, but for an even stronger solution you can use persistent logins that store the username in the database. See the Spring Security docs for a description of the implementation.

+
+
+

Persistent login is also useful for authentication schemes like Facebook, where you do not manage passwords in your database, but most of the other user information is stored locally. Without a password you cannot use the standard cookie format, so persistent logins enable remember-me cookies in these scenarios.

+
+
+

To use this feature, run the s2-create-persistent-token script. This will create the domain class, and register its name in grails-app/conf/application.groovy. It will also enable persistent logins by setting rememberMe.persistent to true.

+
+
+
+
+

8.4. Ajax Authentication

+
+

The typical pattern of using web site authentication to access restricted pages involves intercepting access requests for secure pages, redirecting to a login page (possibly off-site, for example when using a Single Sign-on implementation such as CAS), and redirecting back to the originally-requested page after a successful login. Each page can also have a login link to allow explicit logins at any time.

+
+
+

Another option is to also have a login link on each page and to use JavaScript to present a login form within the current page in a popup. The JavaScript code submits the authentication request and displays success or error messages as appropriate.

+
+
+

The plugin supports Ajax logins, but you need to create your own client-side code. There are only a few necessary changes, and of course the sample code here is pretty basic so you should enhance it for your needs.

+
+
+

The approach here involves editing your template page(s) to show “You’re logged in as …​” text if logged in and a login link if not, along with a hidden login form that is shown using JavaScript.

+
+
+

This example uses jQuery and jqModal, a jQuery plugin that creates and manages dialogs and popups. Download jqModal.js and copy it to grails-app/assets/javascripts, and download jqModal.css and copy it to grails-app/assets/stylesheets.

+
+
+

Create grails-app/assets/javascripts/ajaxLogin.js and add this JavaScript code:

+
+
+
ajaxLogin.js
+
+
var onLogin;
+
+$.ajaxSetup({
+   beforeSend: function(jqXHR, event) {
+      if (event.url != $("#ajaxLoginForm").attr("action")) {
+         // save the 'success' function for later use if
+         // it wasn't triggered by an explicit login click
+         onLogin = event.success;
+      }
+   },
+   statusCode: {
+      // Set up a global Ajax error handler to handle 401
+      // unauthorized responses. If a 401 status code is
+      // returned the user is no longer logged in (e.g. when
+      // the session times out), so re-display the login form.
+      401: function() {
+         showLogin();
+      }
+   }
+});
+
+function showLogin() {
+   var ajaxLogin = $("#ajaxLogin");
+   ajaxLogin.css("text-align", "center");
+   ajaxLogin.jqmShow();
+}
+
+function logout(event) {
+   event.preventDefault();
+   $.ajax({
+      url: $("#_logout").attr("href"),
+      method: "POST",
+      success: function(data, textStatus, jqXHR) {
+         window.location = "/";
+      },
+      error: function(jqXHR, textStatus, errorThrown) {
+         console.log("Logout error, textStatus: " + textStatus +
+                     ", errorThrown: " + errorThrown);
+      }
+   });
+}
+
+function authAjax() {
+   $("#loginMessage").html("Sending request ...").show();
+
+   var form = $("#ajaxLoginForm");
+   $.ajax({
+      url:       form.attr("action"),
+      method:   "POST",
+      data:      form.serialize(),
+      dataType: "JSON",
+      success: function(json, textStatus, jqXHR) {
+         if (json.success) {
+            form[0].reset();
+            $("#loginMessage").empty();
+            $("#ajaxLogin").jqmHide();
+            $("#loginLink").html(
+               'Logged in as ' + json.username +
+               ' (<a href="' + $("#_logout").attr("href") +
+               '" id="logout">Logout</a>)');
+            $("#logout").click(logout);
+            if (onLogin) {
+               // execute the saved event.success function
+               onLogin(json, textStatus, jqXHR);
+            }
+         }
+         else if (json.error) {
+            $("#loginMessage").html('<span class="errorMessage">' +
+                                    json.error + "</error>");
+         }
+         else {
+            $("#loginMessage").html(jqXHR.responseText);
+         }
+      },
+      error: function(jqXHR, textStatus, errorThrown) {
+         if (jqXHR.status == 401 && jqXHR.getResponseHeader("Location")) {
+            // the login request itself wasn't allowed, possibly because the
+            // post url is incorrect and access was denied to it
+            $("#loginMessage").html('<span class="errorMessage">' +
+               'Sorry, there was a problem with the login request</error>');
+         }
+         else {
+            var responseText = jqXHR.responseText;
+            if (responseText) {
+               var json = $.parseJSON(responseText);
+               if (json.error) {
+                  $("#loginMessage").html('<span class="errorMessage">' +
+                                          json.error + "</error>");
+                  return;
+               }
+            }
+            else {
+               responseText = "Sorry, an error occurred (status: " +
+                              textStatus + ", error: " + errorThrown + ")";
+            }
+            $("#loginMessage").html('<span class="errorMessage">' +
+                                    responseText + "</error>");
+         }
+      }
+   });
+}
+
+$(function() {
+   $("#ajaxLogin").jqm({ closeOnEsc: true });
+   $("#ajaxLogin").jqmAddClose("#cancelLogin");
+   $("#ajaxLoginForm").submit(function(event) {
+      event.preventDefault();
+      authAjax();
+   });
+   $("#authAjax").click(authAjax);
+   $("#logout").click(logout);
+});
+
+
+
+

and create grails-app/assets/stylesheets/ajaxLogin.css and add this CSS:

+
+
+
ajaxLogin.css
+
+
#ajaxLogin {
+   padding:    0px;
+   text-align: center;
+   display:    none;
+}
+
+#ajaxLogin .inner {
+   width:              400px;
+   padding-bottom:     6px;
+   margin:             60px auto;
+   text-align:         left;
+   border:             1px solid #aab;
+   background-color:   #f0f0fa;
+   -moz-box-shadow:    2px 2px 2px #eee;
+   -webkit-box-shadow: 2px 2px 2px #eee;
+   -khtml-box-shadow:  2px 2px 2px #eee;
+   box-shadow:         2px 2px 2px #eee;
+}
+
+#ajaxLogin .inner .fheader {
+   padding:          18px 26px 14px 26px;
+   background-color: #f7f7ff;
+   margin:           0px 0 14px 0;
+   color:            #2e3741;
+   font-size:        18px;
+   font-weight:      bold;
+}
+
+#ajaxLogin .inner .cssform p {
+   clear:         left;
+   margin:        0;
+   padding:       4px 0 3px 0;
+   padding-left:  105px;
+   margin-bottom: 20px;
+   height:        1%;
+}
+
+#ajaxLogin .inner .cssform input[type="text"],
+#ajaxLogin .inner .cssform input[type="password"] {
+   width: 150px;
+}
+
+#ajaxLogin .inner .cssform label {
+   font-weight:   bold;
+   float:         left;
+   text-align:    right;
+   margin-left:  -105px;
+   width:         150px;
+   padding-top:   3px;
+   padding-right: 10px;
+}
+
+.ajaxLoginButton {
+   background-color: #efefef;
+   font-weight: bold;
+   padding: 0.5em 1em;
+   display: -moz-inline-stack;
+   display: inline-block;
+   vertical-align: middle;
+   white-space: nowrap;
+   overflow: visible;
+   text-decoration: none;
+      -moz-border-radius: 0.3em;
+   -webkit-border-radius: 0.3em;
+           border-radius: 0.3em;
+}
+
+.ajaxLoginButton:hover, .ajaxLoginButton:focus {
+   background-color: #999999;
+   color: #ffffff;
+}
+
+#ajaxLogin .inner .login_message {
+   padding: 6px 25px 20px 25px;
+   color:   #c33;
+}
+
+#ajaxLogin .inner .text_ {
+   width: 120px;
+}
+
+#ajaxLogin .inner .chk {
+   height: 12px;
+}
+
+.errorMessage {
+   color: red;
+}
+
+
+
+

There’s no need to register the JavaScript files in grails-app/assets/javascripts/application.js if you have this require_tree directive:

+
+
+
application.js
+
+
//= require_tree .
+
+
+
+

but you can explicitly include them if you want. Register the two CSS files in /grails-app/assets/stylesheets/application.css:

+
+
+
application.css
+
+
/*
+ ...
+ *= require ajaxLogin
+ *= require jqModal
+ ...
+ */
+
+
+
+

We’ll need some GSP code to define the HTML, so create grails-app/views/includes/_ajaxLogin.gsp and add this:

+
+
+
_ajaxLogin.gsp
+
+
<span id="logoutLink" style="display: none;">
+<g:link elementId='_logout' controller='logout'>Logout</g:link>
+</span>
+
+<span id="loginLink" style="position: relative; margin-right: 30px; float: right">
+<sec:ifLoggedIn>
+   Logged in as <sec:username/> (<g:link elementId='logout' controller='logout'>Logout</g:link>)
+</sec:ifLoggedIn>
+<sec:ifNotLoggedIn>
+   <a href="#" onclick="showLogin(); return false;">Login</a>
+</sec:ifNotLoggedIn>
+</span>
+
+<div id="ajaxLogin" class="jqmWindow" style="z-index: 3000;">
+   <div class="inner">
+      <div class="fheader">Please Login..</div>
+      <form action="${request.contextPath}/login/authenticate" method="POST"
+            id="ajaxLoginForm" name="ajaxLoginForm" class="cssform" autocomplete="off">
+         <p>
+            <label for="username">Username:</label>
+            <input type="text" class="text_" name="username" id="username" />
+         </p>
+         <p>
+            <label for="password">Password</label>
+            <input type="password" class="text_" name="password" id="password" />
+         </p>
+         <p>
+            <label for="remember_me">Remember me</label>
+            <input type="checkbox" class="chk" id="remember_me" name="remember-me"/>
+         </p>
+         <p>
+            <input type="submit" id="authAjax" name="authAjax"
+                   value="Login" class="ajaxLoginButton" />
+            <input type="button" id="cancelLogin" value="Cancel"
+                   class="ajaxLoginButton" />
+         </p>
+      </form>
+      <div style="display: none; text-align: left;" id="loginMessage"></div>
+   </div>
+</div>
+
+
+
+

And finally, update the grails-app/views/layouts/main.gsp layout to include _ajaxLogin.gsp, adding it after the <body> tag:

+
+
+
main.gsp
+
+
<html lang="en" class="no-js">
+   <head>
+      ...
+      <g:layoutHead/>
+   </head>
+   <body>
+      <g:render template='/includes/ajaxLogin'/>
+      ...
+      <g:layoutBody/>
+   </body>
+</html>
+
+
+
+

The important aspects of this code are:

+
+
+
    +
  • +

    There is a <span> positioned in the top-right that shows the username and a logout link when logged in, and a login link otherwise.

    +
  • +
  • +

    The form posts to the same URL as the regular form, /login/authenticate, and is mostly the same except for the addition of a “Cancel” button (you can also dismiss the dialog by clicking outside of it or with the escape key).

    +
  • +
  • +

    Error messages are displayed within the popup <div>.

    +
  • +
  • +

    Because there is no page redirect after successful login, the Javascript replaces the login link to give a visual indication that the user is logged in.

    +
  • +
  • +

    The Logout link also uses Ajax to submit a POST request to the standard logout url and redirect you to the index page after the request finishes.

    +
    +
      +
    • +

      Note that in the JavaScript logout function, you’ll need to change the url in the success callback to the correct post-logout value, e.g. window.location = "/appname"; if you have configured the contextPath to be "/appname"

      +
    • +
    +
    +
  • +
+
+
+

8.4.1. How Does Ajax login Work?

+
+

Most Ajax libraries include an X-Requested-With header that indicates that the request was made by XMLHttpRequest instead of being triggered by clicking a regular hyperlink or form submit button. The plugin uses this header to detect Ajax login requests, and uses subclasses of some of Spring Security’s classes to use different redirect urls for Ajax requests than regular requests. Instead of showing full pages, LoginController has JSON-generating methods ajaxSuccess(), ajaxDenied(), and authfail() that generate JSON that the login Javascript code can use to appropriately display success or error messages.

+
+
+

To summarize, the typical flow would be

+
+
+
    +
  • +

    click the link to display the login form

    +
  • +
  • +

    enter authentication details and click Login

    +
  • +
  • +

    the form is submitted using an Ajax request

    +
  • +
  • +

    if the authentication succeeds:

    +
    +
      +
    • +

      a redirect to /login/ajaxSuccess occurs (this URL is configurable)

      +
    • +
    • +

      the rendered response is JSON and it contains two values, a boolean value success with the value true and a string value username with the authenticated user’s login name

      +
    • +
    • +

      the client determines that the login was successful and updates the page to indicate the the user is logged in; this is necessary since there’s no page redirect like there would be for a non-Ajax login

      +
    • +
    +
    +
  • +
  • +

    if the authentication fails:

    +
    +
      +
    • +

      a redirect to /login/authfail?ajax=true occurs (this URL is configurable)

      +
    • +
    • +

      the rendered response is JSON and it contains one value, a string value error with the displayable error message; this will be different depending on why the login was unsuccessful (bad username or password, account locked, etc.)

      +
    • +
    • +

      the client determines that the login was not successful and displays the error message

      +
    • +
    +
    +
  • +
  • +

    note that both a successful and an unsuccessful login will trigger the onSuccess Ajax callback; the onError callback will only be triggered if there’s an exception or network issue

    +
  • +
+
+
+
+
+
+
+

9. Authentication Providers

+
+
+

The plugin registers authentication providers that perform authentication by implementing the AuthenticationProvider interface.

+
+ + +++++ + + + + + + + + + + + + + + +
Table 14. Authentication provider configuration options
PropertyDefault ValueMeaning

providerNames

['daoAuthenticationProvider', 'anonymousAuthenticationProvider', 'rememberMeAuthenticationProvider']

Bean names of authentication providers

+
+

Use daoAuthenticationProvider to authenticate using the User and Role database tables, rememberMeAuthenticationProvider to log in with a rememberMe cookie, and anonymousAuthenticationProvider to create an “anonymous” authentication if no other provider authenticates.

+
+
+

To customize this list, you define a providerNames attribute with a list of bean names. The beans must be declared either by the plugin, or yourself in resources.groovy. Suppose you have a custom MyAuthenticationProvider in resources.groovy:

+
+
+
Listing 57. Registering a custom authentication provider bean in resources.groovy
+
+
import com.foo.MyAuthenticationProvider
+
+beans = {
+   myAuthenticationProvider(MyAuthenticationProvider) {
+      // attributes
+   }
+}
+
+
+
+

You register the provider in grails-app/conf/application.groovy as:

+
+
+
Listing 58. Registering a custom authentication provider name in grails.plugin.springsecurity.providerNames
+
+
grails.plugin.springsecurity.providerNames = [
+   'myAuthenticationProvider',
+   'anonymousAuthenticationProvider',
+   'rememberMeAuthenticationProvider']
+
+
+
+
+
+

10. Custom UserDetailsService

+
+
+

When you authenticate users from a database using DaoAuthenticationProvider (the default mode in the plugin if you have not enabled OpenID, LDAP, and so on), an implementation of UserDetailsService is required. This class is responsible for returning a concrete implementation of UserDetails. The plugin provides grails.plugin.springsecurity.userdetails.GormUserDetailsService as its UserDetailsService implementation and grails.plugin.springsecurity.userdetails.GrailsUser (which extends Spring Security’s User) as its UserDetails implementation.

+
+
+

You can extend or replace GormUserDetailsService with your own implementation by defining a bean in grails-app/conf/spring/resources.groovy with the same bean name, userDetailsService. This works because application beans are configured after plugin beans and there can only be one bean for each name. The plugin uses an extension of UserDetailsService, grails.plugin.springsecurity.userdetails.GrailsUserDetailsService, which adds the method UserDetails loadUserByUsername(String username, boolean loadRoles) to support use cases like in LDAP where you often infer all roles from LDAP but might keep application-specific user details in the database. Create the class in src/groovy and not in grails-app/services - although the interface name includes “Service”, this is just a coincidence and the bean wouldn’t benefit from being a Grails service.

+
+
+

In the following example, the UserDetails and GrailsUserDetailsService implementation adds the full name of the user domain class in addition to the standard information. If you extract extra data from your domain class, you are less likely to need to reload the user from the database. Most of your common data can be kept along with your security credentials.

+
+
+

This example adds in a fullName property. Keeping the full name cached avoids hitting the database just for that lookup. GrailsUser already adds the id value from the domain class to so we can do a more efficient database load of the user. If all you have is the username, then you need to call User.findByUsername(principal.username), but if you have the id you can call User.get(principal.id). Even if you have a unique index on the username database column, loading by primary key is usually more efficient because it takes advantage of Hibernate’s first-level and second-level caches.

+
+
+

There is not much to implement other than your application-specific lookup code:

+
+
+
MyUserDetails.groovy
+
+
package com.mycompany.myapp
+
+import grails.plugin.springsecurity.userdetails.GrailsUser
+import org.springframework.security.core.GrantedAuthority
+
+class MyUserDetails extends GrailsUser {
+
+   final String fullName
+
+   MyUserDetails(String username, String password, boolean enabled,
+                 boolean accountNonExpired, boolean credentialsNonExpired,
+                 boolean accountNonLocked,
+                 Collection<GrantedAuthority> authorities,
+                 long id, String fullName) {
+      super(username, password, enabled, accountNonExpired,
+            credentialsNonExpired, accountNonLocked, authorities, id)
+
+      this.fullName = fullName
+   }
+}
+
+
+
+
MyUserDetailsService.groovy
+
+
package com.mycompany.myapp
+
+import grails.plugin.springsecurity.SpringSecurityUtils
+import grails.plugin.springsecurity.userdetails.GrailsUserDetailsService
+import grails.plugin.springsecurity.userdetails.NoStackUsernameNotFoundException
+import grails.gorm.transactions.Transactional
+import org.springframework.security.core.authority.SimpleGrantedAuthority
+import org.springframework.security.core.userdetails.UserDetails
+import org.springframework.security.core.userdetails.UsernameNotFoundException
+
+class MyUserDetailsService implements GrailsUserDetailsService {
+
+   /**
+    * Some Spring Security classes (e.g. RoleHierarchyVoter) expect at least
+    * one role, so we give a user with no granted roles this one which gets
+    * past that restriction but doesn't grant anything.
+    */
+   static final List NO_ROLES = [new SimpleGrantedAuthority(SpringSecurityUtils.NO_ROLE)]
+
+   UserDetails loadUserByUsername(String username, boolean loadRoles)
+         throws UsernameNotFoundException {
+      return loadUserByUsername(username)
+   }
+
+   @Transactional(readOnly=true, noRollbackFor=[IllegalArgumentException, UsernameNotFoundException])
+   UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+
+      User user = User.findByUsername(username)
+      if (!user) throw new NoStackUsernameNotFoundException()
+
+      def roles = user.authorities
+
+      // or if you are using role groups:
+      // def roles = user.authorities.collect { it.authorities }.flatten().unique()
+
+      def authorities = roles.collect {
+         new SimpleGrantedAuthority(it.authority)
+      }
+
+      return new MyUserDetails(user.username, user.password, user.enabled,
+            !user.accountExpired, !user.passwordExpired,
+            !user.accountLocked, authorities ?: NO_ROLES, user.id,
+            user.firstName + " " + user.lastName)
+   }
+}
+
+
+
+

The loadUserByUsername method is transactional, but read-only, to avoid lazy loading exceptions when accessing the authorities collection. There are obviously no database updates here but this is a convenient way to keep the Hibernate Session open to enable accessing the roles.

+
+
+

To use your implementation, register it in grails-app/conf/spring/resources.groovy like this:

+
+
+
Listing 59. Registering a custom UserDetailsService in resources.groovy
+
+
import com.mycompany.myapp.MyUserDetailsService
+
+beans = {
+   userDetailsService(MyUserDetailsService)
+}
+
+
+
+

Another option for loading users and roles from the database is to subclass grails.plugin.springsecurity.userdetails.GormUserDetailsService - the methods are all protected so you can override as needed.

+
+
+

This approach works with all beans defined in SpringSecurityCoreGrailsPlugin.doWithSpring() - you can replace or subclass any of the Spring beans to provide your own functionality when the standard extension mechanisms are insufficient.

+
+
+

10.1. Flushing the Cached Authentication

+
+

If you store mutable data in your custom UserDetails implementation (such as full name in the preceding example), be sure to rebuild the Authentication if it changes. springSecurityService has a reauthenticate method that does this for you:

+
+
+
Listing 60. Calling reauthenticate() after making a change that affects the cached authentication
+
+
class MyController {
+
+   def springSecurityService
+
+   def someAction() {
+      def user = ...
+      // update user data
+      user.save()
+      springSecurityService.reauthenticate user.username
+      ...
+   }
+}
+
+
+
+
+
+
+

11. Password and Account Protection

+
+
+

The sections that follow discuss approaches to protecting passwords and user accounts.

+
+
+

11.1. Password Hashing

+
+

By default the plugin uses the bcrypt algorithm to hash passwords. You can customize this with the grails.plugin.springsecurity.password.algorithm attribute as described below. In addition you can increase the security of your passwords by adding a salt, which can be a property of the UserDetails instance, a global static value, or any custom value you want.

+
+
+

bcrypt is a much more secure alternative to the message digest approaches since it supports a customizable work level which when increased takes more computation time to hash the users' passwords, but also dramatically increases the cost of brute force attacks. Given how easy it is to use GPUs to crack passwords, you should definitely consider using bcrypt for new projects and switching to it for existing projects. Note that due to the approach used by bcrypt, you cannot add an additional salt like you can with the message digest algorithms.

+
+
+

Enable bcrypt by using the 'bcrypt' value for the algorithm config attribute:

+
+
+
+
grails.plugin.springsecurity.password.algorithm = 'bcrypt'
+
+
+
+

and optionally changing the number of rekeying rounds (which will affect the time it takes to hash passwords), e.g.

+
+
+
+
grails.plugin.springsecurity.password.bcrypt.logrounds = 15
+
+
+
+

Note that the number of rounds must be between 4 and 31.

+
+
+

PBKDF2 is also supported.

+
+
+

The table shows configurable password hashing attributes.

+
+
+

If you want to use a message digest hashing algorithm, see this Java page for the available algorithms.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 15. Password Hashing configuration options
PropertyDefaultDescription

password.algorithm

“bcrypt”

passwordEncoder algorithm; “bcrypt” to use bcrypt, “pbkdf2” to use PBKDF2, or any message digest algorithm that is supported in your JDK

password.encodeHashAsBase64

false

If true, Base64-encode the hashed password

password.bcrypt.logrounds

10

the number of rekeying rounds to use when using bcrypt

password.hash.iterations

10000

the number of iterations which will be executed on the hashed password/salt when using a message digest algorithm

+
+ + + + + +
+ + +The bcrypt logrounds and iterations are set to a lower number to improve speed while testing. +If you rely on them to be higher, set them manually when testing. +
+
+
+
+

11.2. Salted Passwords

+
+

The Spring Security plugin uses hashed passwords and a digest algorithm that you specify. For enhanced protection against dictionary attacks, you should use a salt in addition to digest hashing.

+
+
+ + + + + +
+ + +
+

Note that if you use bcrypt (the default setting) or pbkdf2, do not configure a salt (e.g. the dao.reflectionSaltSourceProperty property or a custom saltSource bean) because these algorithms use their own internally.

+
+
+
+
+

There are two approaches to using salted passwords in the plugin - defining a property in the UserDetails class to access by reflection, or by directly implementing SaltSource yourself.

+
+
+

11.2.1. dao.reflectionSaltSourceProperty

+
+

Set the dao.reflectionSaltSourceProperty configuration property:

+
+
+
+
grails.plugin.springsecurity.dao.reflectionSaltSourceProperty = 'username'
+
+
+
+

This property belongs to the UserDetails class. By default it is an instance of grails.plugin.springsecurity.userdetails.GrailsUser, which extends the standard Spring Security User class and not your “person” domain class. This limits the available properties unless you use a custom UserDetailsService (Custom UserDetailsService).

+
+
+

As long as the username does not change, this approach works well for the salt. If you choose a property that the user can change, the user cannot log in again after changing it unless you re-hash the password with the new value. So it’s best to use a property that doesn’t change.

+
+
+

Another option is to generate a random salt when creating users and store this in the database by adding a new property to the “person” class. This approach requires a custom UserDetailsService because you need a custom UserDetails implementation that also has a “salt” property, but this is more flexible and works in cases where users can change their username.

+
+
+
+

11.2.2. SystemWideSaltSource and Custom SaltSource

+
+

Spring Security supplies a simple SaltSource implementation, SystemWideSaltSource, which uses the same salt for each user. It’s less robust than using a different value for each user but still better than no salt at all.

+
+
+

An example override of the salt source bean using SystemWideSaltSource would look like this:

+
+
+
Listing 61. Configuring SystemWideSaltSource as the saltSource bean in application.groovy
+
+
import org.springframework.security.authentication.dao.SystemWideSaltSource
+
+beans = {
+   saltSource(SystemWideSaltSource) {
+      systemWideSalt = 'the_salt_value'
+   }
+}
+
+
+
+

To have full control over the process, you can implement the SaltSource interface and replace the plugin’s implementation with your own by defining a bean in grails-app/conf/spring/resources.groovy with the name saltSource:

+
+
+
Listing 62. Configuring a custom implementation of the saltSource bean in application.groovy
+
+
import com.foo.bar.MySaltSource
+
+beans = {
+   saltSource(MySaltSource) {
+      // set properties
+   }
+}
+
+
+
+
+

11.2.3. Hashing Passwords

+
+

Regardless of the implementation, you need to be aware of what value to use for a salt when creating or updating users, for example, in a save or update action in a UserController. When hashing the password, use the two-parameter version of springSecurityService.encodePassword():

+
+
+
Listing 63. Explicitly hashing passwords
+
+
class UserController {
+
+   def springSecurityService
+
+   def save(User user) {
+      user.password = springSecurityService.encodePassword(
+            params.password, user.username)
+      if (!user.save(flush: true)) {
+         render view: 'create', model: [userInstance: user]
+         return
+      }
+
+      flash.message = "The user was created"
+      redirect action: show, id: user.id
+   }
+
+   def update(User user) {
+
+      if (params.password) {
+         params.password = springSecurityService.encodePassword(
+                    params.password, user.username)
+      }
+      if (!user.save(flush: true)) {
+         render view: 'edit', model: [userInstance: user]
+         return
+      }
+
+      if (springSecurityService.loggedIn &&
+               springSecurityService.principal.username == user.username) {
+         springSecurityService.reauthenticate user.username
+      }
+
+      flash.message = "The user was updated"
+      redirect action: show, id: user.id
+   }
+}
+
+
+
+ + + + + +
+ + +
+

If you are encoding the password in the User domain class (using beforeInsert and encodePassword) then don’t call springSecurityService.encodePassword() in your controller since you’ll double-hash the password and users won’t be able to log in. It’s best to encapsulate the password handling logic in the domain class. In newer versions of the plugin (version 1.2 and higher) code is auto-generated in the user class so you’ll need to adjust that password hashing for your salt approach.

+
+
+
+
+
+
+

11.3. Account Locking and Forcing Password Change

+
+

Spring Security supports four ways of disabling a user account. When you attempt to log in, the UserDetailsService implementation creates an instance of UserDetails that uses these accessor methods:

+
+
+
    +
  • +

    isAccountNonExpired()

    +
  • +
  • +

    isAccountNonLocked()

    +
  • +
  • +

    isCredentialsNonExpired()

    +
  • +
  • +

    isEnabled()

    +
  • +
+
+
+

If you use the s2-quickstart script to create a user domain class, it creates a class with corresponding properties to manage this state.

+
+
+

When an accessor returns true for accountExpired, accountLocked, or passwordExpired or returns false for enabled, a corresponding exception is thrown:

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 16. Account locked and disabled exceptions
AccessorPropertyException

isAccountNonExpired()

accountExpired

AccountExpiredException

isAccountNonLocked()

accountLocked

LockedException

isCredentialsNonExpired()

passwordExpired

CredentialsExpiredException

isEnabled()

enabled

DisabledException

+
+

You can configure exception mappings in application.groovy to associate a URL to any or all of these exceptions to determine where to redirect after a failure, for example:

+
+
+
Listing 64. Example grails.plugin.springsecurity.failureHandler.exceptionMappings configuration
+
+
import org.springframework.security.authentication.LockedException
+import org.springframework.security.authentication.DisabledException
+import org.springframework.security.authentication.AccountExpiredException
+import org.springframework.security.authentication.CredentialsExpiredException
+
+grails.plugin.springsecurity.failureHandler.exceptionMappings = [
+   [exception: LockedException.name,             url: '/user/accountLocked'],
+   [exception: DisabledException.name,           url: '/user/accountDisabled'],
+   [exception: AccountExpiredException.name,     url: '/user/accountExpired'],
+   [exception: CredentialsExpiredException.name, url: '/user/passwordExpired']
+]
+
+
+
+

Without a mapping for a particular exception, the user is redirected to the standard login fail page (by default /login/authfail), which displays an error message from this table:

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 17. Login failure messages
PropertyDefault

errors.login.disabled

“Sorry, your account is disabled.”

errors.login.expired

“Sorry, your account has expired.”

errors.login.passwordExpired

“Sorry, your password has expired.”

errors.login.locked

“Sorry, your account is locked.”

errors.login.fail

“Sorry, we were not able to find a user with that username and password.”

+
+

You can customize these messages by setting the corresponding property in application.groovy, for example:

+
+
+
+
grails.plugin.springsecurity.errors.login.locked = "None shall pass."
+
+
+
+

You can use this functionality to manually lock a user’s account or expire the password, but you can automate the process. For example, use the Quartz plugin to periodically expire everyone’s password and force them to go to a page where they update it. Keep track of the date when users change their passwords and use a Quartz job to expire their passwords once the password is older than a fixed max age.

+
+
+

Here’s an example for a password expired workflow. You’d need a simple action to display a password reset form (similar to the login form):

+
+
+
Listing 65. Adding a passwordExpired() controller action
+
+
def passwordExpired() {
+   [username: session['SPRING_SECURITY_LAST_USERNAME']]
+}
+
+
+
+

and the form would look something like this:

+
+
+
Listing 66. Sample GSP code for a password reset page
+
+
<div id='login'>
+   <div class='inner'>
+      <g:if test='${flash.message}'>
+      <div class='login_message'>${flash.message}</div>
+      </g:if>
+      <div class='fheader'>Please update your password..</div>
+      <g:form action='updatePassword' id='passwordResetForm' class='cssform' autocomplete='off'>
+         <p>
+            <label for='username'>Username</label>
+            <span class='text_'>${username}</span>
+         </p>
+         <p>
+            <label for='password'>Current Password</label>
+            <g:passwordField name='password' class='text_' />
+         </p>
+         <p>
+            <label for='password'>New Password</label>
+            <g:passwordField name='password_new' class='text_' />
+         </p>
+         <p>
+            <label for='password'>New Password (again)</label>
+            <g:passwordField name='password_new_2' class='text_' />
+         </p>
+         <p>
+            <input type='submit' value='Reset' />
+         </p>
+      </g:form>
+   </div>
+</div>
+
+
+
+

It’s important that you not allow the user to specify the username (it’s available in the HTTP session) but that you require the current password, otherwise it would be simple to forge a password reset.

+
+
+

The GSP form would submit to an action like this one:

+
+
+
Listing 67. Adding an updatePassword() controller action
+
+
def updatePassword(String password, String password_new, String password_new_2) {
+   String username = session['SPRING_SECURITY_LAST_USERNAME']
+   if (!username) {
+      flash.message = 'Sorry, an error has occurred'
+      redirect controller: 'login', action: 'auth'
+      return
+   }
+
+   if (!password || !password_new || !password_new_2 || password_new != password_new_2) {
+      flash.message = 'Please enter your current password and a valid new password'
+      render view: 'passwordExpired', model: [username: session['SPRING_SECURITY_LAST_USERNAME']]
+      return
+   }
+
+   User user = User.findByUsername(username)
+   if (!passwordEncoder.matches(password, user.password)) {
+      flash.message = 'Current password is incorrect'
+      render view: 'passwordExpired', model: [username: session['SPRING_SECURITY_LAST_USERNAME']]
+      return
+   }
+
+   if (passwordEncoder.matches(password_new, user.password)) {
+      flash.message = 'Please choose a different password from your current one'
+      render view: 'passwordExpired', model: [username: session['SPRING_SECURITY_LAST_USERNAME']]
+      return
+   }
+
+   user.password = password_new
+   user.passwordExpired = false
+   user.save() // if you have password constraints check them here
+
+   redirect controller: 'login', action: 'auth'
+}
+
+
+
+

11.3.1. User Cache

+
+

If the cacheUsers configuration property is set to true, Spring Security caches UserDetails instances to save trips to the database (the default is false). This optimization is minor, because typically only two small queries occur during login — one to load the user, and one to load the authorities.

+
+
+

If you enable this feature, you must remove any cached instances after making a change that affects login. If you do not remove cached instances, even though a user’s account is locked or disabled, logins succeed because the database is bypassed. By removing the cached data, you force at trip to the database to retrieve the latest updates.

+
+
+

Here is a sample Quartz job that demonstrates how to find and disable users with passwords that are too old:

+
+
+
ExpirePasswordsJob.groovy
+
+
package com.mycompany.myapp
+
+class ExpirePasswordsJob {
+
+   static triggers = {
+      cron name: 'myTrigger', cronExpression: '0 0 0 * * ?' // midnight daily
+   }
+
+   def userCache
+
+   void execute() {
+
+      def users = User.executeQuery(
+            'from User u where u.passwordChangeDate <= :cutoffDate',
+            [cutoffDate: new Date() - 180])
+
+      for (user in users) {
+         // flush each separately so one failure doesn't rollback all of the others
+         try {
+            user.passwordExpired = true
+            user.save(flush: true)
+            userCache.removeUserFromCache user.username
+         }
+         catch (e) {
+            log.error "problem expiring password for user $user.username : $e.message", e
+         }
+      }
+   }
+}
+
+
+
+ + + + + +
+ + +
+

If your application includes a dependency for org.hibernate:hibernate-ehcache (to provide an Ehcache-based 2nd-level cache implementation) you might have a conflict with the Ehcache dependency. hibernate-ehcache has a dependency for ehcache-core, but this plugin has a dependency for ehcache, so you will end up with both jars in your classpath. hibernate-ehcache works fine with the full ehcache jar, so you can avoid this problem by excluding ehcache-core in build.gradle:

+
+
+
+
compile 'org.hibernate:hibernate-ehcache', {
+   exclude module: 'ehcache-core'
+}
+
+
+
+
+
+
+
+
+
+

12. URL Properties

+
+
+

The table shows configurable URL-related properties.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 18. URL-related Properties
PropertyDefault ValueMeaning

apf.filterProcessesUrl

“/login/authenticate”

Login form post URL, intercepted by Spring Security filter

apf.usernameParameter

“username”

Login form username parameter

apf.passwordParameter

“password”

Login form password parameter

apf.allowSessionCreation

true

Whether to allow authentication to create an HTTP session

apf.postOnly

true

Whether to allow only POST login requests

apf.continueChainBefore SuccessfulAuthentication

false

whether to continue calling subsequent filters in the filter chain

apf.storeLastUsername

false

Whether to store the login username in the HTTP session

failureHandler.defaultFailureUrl

“/login/authfail?login_error=1”

Redirect URL for failed logins

failureHandler.ajaxAuthFailUrl

“/login/authfail?ajax=true”

Redirect URL for failed Ajax logins

failureHandler.exceptionMappings

none

Map of exception class name (subclass of AuthenticationException) to which the URL will redirect for that exception type after authentication failure

failureHandler.useForward

false

Whether to render the error page (true) or redirect (false)

failureHandler.allowSessionCreation

true

Whether to enable session creation to store the authentication failure exception

successHandler.defaultTargetUrl

“/”

Default post-login URL if there is no saved request that triggered the login

successHandler.alwaysUseDefault

false

If true, always redirects to the value of successHandler.defaultTargetUrl after successful authentication; otherwise redirects to to originally-requested page

successHandler.targetUrlParameter

“spring-security-redirect”

Name of optional login form parameter that specifies destination after successful login

successHandler.useReferer

false

Whether to use the HTTP Referer header to determine post-login destination

successHandler.ajaxSuccessUrl

“/login/ajaxSuccess”

URL for redirect after successful Ajax login

auth.loginFormUrl

“/login/auth”

URL of login page

auth.forceHttps

false

If true, redirects login page requests to HTTPS

auth.ajaxLoginFormUrl

“/login/authAjax”

URL of Ajax login page

auth.useForward

false

Whether to render the login page (true) or redirect (false)

logout.afterLogoutUrl

“/”

URL for redirect after logout

logout.filterProcessesUrl

“/logoff”

Logout URL, intercepted by Spring Security filter

logout.handlerNames

['rememberMeServices', 'securityContextLogoutHandler']

Logout handler bean names. See Logout Handlers

logout.clearAuthentication

true

If true removes the Authentication from the SecurityContext to prevent issues with concurrent requests

logout.invalidateHttpSession

true

Whether to invalidate the HTTP session when logging out

logout.targetUrlParameter

none

the querystring parameter name for the post-logout URL

logout.alwaysUseDefaultTargetUrl

false

whether to always use the afterLogoutUrl as the post-logout URL

logout.redirectToReferer

false

whether to use the Referer header value as the post-logout URL

logout.postOnly

true

If true only POST requests will be allowed to logout

adh.errorPage

“/login/denied”

Location of the 403 error page (or set to null to send a 403 error and not render a page)

adh.ajaxErrorPage

“/login/ajaxDenied”

Location of the 403 error page for Ajax requests

adh.useForward

true

If true a forward will be used to render the error page, otherwise a redirect is used

ajaxHeader

“X-Requested-With”

Header name sent by Ajax library, used to detect Ajax

ajaxCheckClosure

none

An optional closure that can determine if a request is Ajax

redirectStrategy.contextRelative

false

If true, the redirect URL will be the value after the request context path. This results in the loss of protocol information (HTTP or HTTPS), so causes problems if a redirect is being performed to change from HTTP to HTTPS or vice versa

switchUser URLs

See Switch User, under Customizing URLs

fii.alwaysReauthenticate

false

If true, re-authenticates when there is a Authentication in the SecurityContext

fii.rejectPublicInvocations

true

Disallow URL access when there is no request mapping

fii.validateConfigAttributes

true

Whether to check that all ConfigAttribute instances are valid at startup

fii.publishAuthorizationSuccess

false

Whether to publish an AuthorizedEvent after successful access check

fii.observeOncePerRequest

true

If false allow checks to happen multiple times, for example when JSP forwards are being used and filter security is desired on each included fragment of the HTTP request

+
+
+
+

13. Hierarchical Roles

+
+
+

Hierarchical roles are a convenient way to reduce clutter in your request mappings.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + +
Table 19. Hierarchical Roles configuration options
PropertyDefault ValueMeaning

roleHierarchy

none

Hierarchical role definition

roleHierarchyEntryClassName

none

Domain class used to manage persistent role hierarchy entries

+
+

For example, if you have several types of “admin” roles that can be used to access a URL pattern and you do not use hierarchical roles, you need to specify all the admin roles:

+
+
+
+
package com.mycompany.myapp
+
+import grails.plugin.springsecurity.annotation.Secured
+
+class SomeController {
+
+   @Secured(['ROLE_ADMIN', 'ROLE_FINANCE_ADMIN', 'ROLE_SUPERADMIN'])
+   def someAction() {
+      ...
+   }
+}
+
+
+
+

However, if you have a business rule that says ROLE_FINANCE_ADMIN implies being granted ROLE_ADMIN, and that ROLE_SUPERADMIN implies being granted ROLE_FINANCE_ADMIN, you can express that hierarchy as:

+
+
+
+
grails.plugin.springsecurity.roleHierarchy = '''
+   ROLE_SUPERADMIN > ROLE_FINANCE_ADMIN
+   ROLE_FINANCE_ADMIN > ROLE_ADMIN
+'''
+
+
+
+

Then you can simplify your mappings by specifying only the roles that are required:

+
+
+
+
package com.mycompany.myapp
+
+import grails.plugin.springsecurity.annotation.Secured
+
+class SomeController {
+
+   @Secured('ROLE_ADMIN')
+   def someAction() {
+      ...
+   }
+}
+
+
+
+

You can also reduce the number of granted roles in the database. Where previously you had to grant ROLE_SUPERADMIN, ROLE_FINANCE_ADMIN, and ROLE_ADMIN, now you only need to grant ROLE_SUPERADMIN.

+
+
+

13.1. Persistent role hierarchy

+
+

Specifying a static string in the roleHierarchy property will be sufficient for most applications, but you can also store the information in your database. This is particularly useful if you’re also storing requestmaps in the database. To use persistant storage, run the s2-create-role-hierarchy-entry script. This will create the domain class and enable persistent storage by registering its name as the roleHierarchyEntryClassName setting in grails-app/conf/application.groovy.

+
+
+

For example, running

+
+
+
+
./gradlew runCommand "-Pargs=s2-create-role-hierarchy-entry com.yourapp.RoleHierarchyEntry"
+
+
+
+

will generate this class in grails-app/domain/com/yourapp/RoleHierarchyEntry.groovy:

+
+
+
RoleHierarchyEntry.groovy
+
+
package com.yourapp
+
+import groovy.transform.EqualsAndHashCode
+import groovy.transform.ToString
+
+@EqualsAndHashCode(includes='entry')
+@ToString(includes='entry', includeNames=true, includePackage=false)
+class RoleHierarchyEntry implements Serializable {
+
+   private static final long serialVersionUID = 1
+
+   String entry
+
+   static constraints = {
+      entry blank: false, unique: true
+   }
+
+   static mapping = {
+      cache true
+   }
+}
+
+
+
+

To store the equivalent entries for the ROLE_SUPERADMIN / ROLE_FINANCE_ADMIN / ROLE_ADMIN hierarchy, add code like this to a method in a transactional service:

+
+
+
Listing 68. Persisting RoleHierarchyEntry instances
+
+
if (!RoleHierarchyEntry.count()) {
+   new RoleHierarchyEntry(entry: 'ROLE_SUPERADMIN > ROLE_FINANCE_ADMIN').save()
+   new RoleHierarchyEntry(entry: 'ROLE_FINANCE_ADMIN > ROLE_ADMIN').save()
+}
+
+
+
+

Remember to update the roleHierarchy beans hierarchy definition by calling SpringSecurityService#reloadDBRoleHierarchy, or your model changes are not reflected in the running application.

+
+
+
+
+
+

14. Switch User

+
+
+

To enable a user to switch from the current Authentication to another user’s, set the useSwitchUserFilter attribute to true. This feature is similar to the “su” command in Unix. It enables, for example, an admin to act as a regular user to perform some actions, and then switch back.

+
+
+ + + + + +
+ + +
+

This feature is very powerful; it allows full access to everything the switched-to user can access without requiring the user’s password. Limit who can use this feature by guarding the user switch URL with a role, for example, ROLE_SWITCH_USER, ROLE_ADMIN, and so on.

+
+
+
+
+

14.1. Switching to Another User

+
+

To switch to another user, typically you create a form that submits to /login/impersonate:

+
+
+
Listing 69. An HTML form for switching to another user
+
+
<sec:ifAllGranted roles='ROLE_SWITCH_USER'>
+
+   <form action='/login/impersonate' method='POST'>
+      Switch to user: <input type='text' name='username'/> <br/>
+      <input type='submit' value='Switch'/>
+   </form>
+
+</sec:ifAllGranted>
+
+
+
+

Here the form is guarded by a check that the logged-in user has ROLE_SWITCH_USER and is not shown otherwise. You also need to guard the user switch URL, and the approach depends on your mapping scheme. If you use annotations, add a rule to the controllerAnnotations.staticRules attribute:

+
+
+
Listing 70. Guarding the switch user url with controllerAnnotations.staticRules
+
+
grails.plugin.springsecurity.controllerAnnotations.staticRules = [
+   ...
+   [pattern: '/login/impersonate', access: ['ROLE_SWITCH_USER', 'IS_AUTHENTICATED_FULLY']]
+]
+
+
+
+

If you use Requestmaps, create a rule like this (for example, in BootStrap):

+
+
+
Listing 71. Guarding the switch user url with a database requestmap
+
+
new Requestmap(url: '/login/impersonate',
+               configAttribute: 'ROLE_SWITCH_USER,IS_AUTHENTICATED_FULLY').save(flush: true)
+
+
+
+

If you use the static application.groovy map, add the rule there:

+
+
+
Listing 72. Guarding the switch user url with interceptUrlMap
+
+
grails.plugin.springsecurity.interceptUrlMap = [
+   ...
+   [pattern: '/login/impersonate', access: ['ROLE_SWITCH_USER', 'IS_AUTHENTICATED_FULLY']]
+]
+
+
+
+
+

14.2. Switching Back to Original User

+
+

To resume as the original user, POST to /logout/impersonate.

+
+
+
Listing 73. A link to switch back to the real user
+
+
<sec:ifSwitched>
+    <form action='${request.contextPath}/logout/impersonate' method='POST'>
+        <input type='submit' value="Resume as ${grails.plugin.springsecurity.SpringSecurityUtils.switchedUserOriginalUsername}"/>
+    </form>
+</sec:ifSwitched>
+
+
+
+
+

14.3. Customizing URLs

+
+

You can customize the URLs that are used for this feature, although it is rarely necessary:

+
+
+
+
grails.plugin.springsecurity.switchUser.switchUserUrl = ...
+grails.plugin.springsecurity.switchUser.exitUserUrl = ...
+grails.plugin.springsecurity.switchUser.targetUrl = ...
+grails.plugin.springsecurity.switchUser.switchFailureUrl = ...
+
+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 20. Switch user configuration options
PropertyDefaultMeaning

useSwitchUserFilter

false

Whether to use the switch user filter

switchUser.switchUserUrl

“/login/impersonate”

URL to access (via POST) to switch to another user

switchUser.exitUserUrl

“/logout/impersonate”

URL to access (via POST) to switch to another user

switchUser.switchUserMatcher

SwitchUserFilter.switchUserMatcher

An alternative to switchUserUrl, define an AntPathRequestMatcher to determine if a request needs to switch user.

switchUser.exitUserMatcher

SwitchUserFilter.exitUserMatcher

An alternative to exitUserUrl, define an AntPathRequestMatcher to determine if a request needs to exit switch user.

switchUser.targetUrl

Same as successHandler.defaultTargetUrl

URL for redirect after switching

switchUser.switchFailureUrl

Same as failureHandler.defaultFailureUrl

URL for redirect after an error during an attempt to switch

switchUser.usernameParameter

SwitchUserFilter.SPRING_SECURITY_SWITCH_USERNAME_KEY

The username request parameter name

+
+
+

14.4. GSP Code

+
+

One approach to supporting the switch user feature is to add code to one or more of your GSP templates. In this example the current username is displayed, and if the user has switched from another (using the sec:ifSwitched tag) then a “resume” button is displayed. If not, and the user has the required role, a form is displayed to allow input of the username to switch to:

+
+
+
Listing 74. Example GSP code to conditionally display a switch user form and resume form
+
+
<sec:ifLoggedIn>
+Logged in as <sec:username/>
+</sec:ifLoggedIn>
+
+<sec:ifSwitched>
+    <form action='${request.contextPath}/logout/impersonate' method='POST'>
+      <input type='submit' value="Resume as ${grails.plugin.springsecurity.SpringSecurityUtils.switchedUserOriginalUsername}"/>
+   </form>
+</sec:ifSwitched>
+
+<sec:ifNotSwitched>
+   <sec:ifAllGranted roles='ROLE_SWITCH_USER'>
+
+   <form action='${request.contextPath}/login/impersonate' method='POST'>
+      Switch to user: <input type='text' name='username'/><br/>
+      <input type='submit' value='Switch'/>
+   </form>
+
+   </sec:ifAllGranted>
+</sec:ifNotSwitched>
+
+
+
+
+
+
+

15. Filters

+
+
+

There are a few different approaches to configuring filter chains.

+
+
+

15.1. Default Approach to Configuring Filter Chains

+
+

The default is to use configuration attributes to determine which extra filters to use (for example, Basic Auth, Switch User, etc.) and add these to the “core” filters. For example, setting grails.plugin.springsecurity.useSwitchUserFilter = true adds switchUserProcessingFilter to the filter chain (and in the correct order). The filter chain built here is applied to all URLs. If you need more flexibility, you can use filterChain.chainMap as discussed in chainMap below.

+
+
+
+

15.2. filterNames

+
+

To define custom filters, to remove a core filter from the Spring Security filter chain (not recommended), or to otherwise have control over the Spring Security filter chain, you can specify the filterNames property as a list of strings. As with the default approach, the Spring Security filter chain built here is applied to all URLs.

+
+
+

For example:

+
+
+
Listing 75. Sample grails.plugin.springsecurity.filterChain.filterNames configuration
+
+
grails.plugin.springsecurity.filterChain.filterNames = [
+   'securityContextPersistenceFilter', 'logoutFilter',
+   'authenticationProcessingFilter', 'myCustomProcessingFilter',
+   'rememberMeAuthenticationFilter', 'anonymousAuthenticationFilter',
+   'exceptionTranslationFilter', 'filterInvocationInterceptor'
+]
+
+
+
+

This example creates a Spring Security filter chain corresponding to the Spring beans with the specified names.

+
+
+
+

15.3. chainMap

+
+

Use the filterChain.chainMap attribute to define which filters are applied to different URL patterns. You define a Map that specifies one or more lists of filter bean names, each with a corresponding URL pattern.

+
+
+
Listing 76. Sample grails.plugin.springsecurity.filterChain.chainMap configuration
+
+
grails.plugin.springsecurity.filterChain.chainMap = [
+   [pattern: '/urlpattern1/**', filters: 'filter1,filter2,filter3,filter4'],
+   [pattern: '/urlpattern2/**', filters: 'filter1,filter3,filter5'],
+   [pattern: '/**',             filters: 'JOINED_FILTERS']
+]
+
+
+
+ + + + + +
+ + +
+

The format of filterChain.chainMap has changed from previous versions to avoid configuration parsing issues. In previous versions the property was a single Map, where the keys were the access patterns and the values were filter names. The old format is no longer supported and your configurations must be updated to the newer format.

+
+
+
+
+

In this example, four filters are applied to URLs matching /urlpattern1/** and three different filters are applied to URLs matching /urlpattern2/**. In addition the special token JOINED_FILTERS is applied to all URLs. This is a conventient way to specify that all defined filters (configured either with configuration rules like useSwitchUserFilter or explicitly using filterNames) should apply to this pattern.

+
+
+

The order of the mappings is important. Each URL will be tested in order from top to bottom to find the first matching one. So you need a /** catch-all rule at the end for URLs that do not match one of the earlier rules.

+
+
+

There’s also a filter negation syntax that can be very convenient. Rather than specifying all of the filter names (and risking forgetting one or putting them in the wrong order), you can use the JOINED_FILTERS keyword and one or more filter names prefixed with a - . This means to use all configured filters except for the excluded ones. For example, if you had a web service that uses Basic Auth for /webservice/** URLs, you would configure that using:

+
+
+
Listing 77. Using JOINED_FILTERS in a filterChain.chainMap configuration
+
+
grails.plugin.springsecurity.filterChain.chainMap = [
+   [pattern: '/webservice/**', filters: 'JOINED_FILTERS,-exceptionTranslationFilter'],
+   [pattern: '/**',            filters: 'JOINED_FILTERS,-basicAuthenticationFilter,-basicExceptionTranslationFilter']
+]
+
+
+
+

For the /webservice/** URLs, we want all filters except for the standard ExceptionTranslationFilter since we want to use just the one configured for Basic Auth. And for the /** URLs (everything else) we want everything except for the Basic Auth filter and its configured ExceptionTranslationFilter.

+
+
+

Additionally, you can use a chainMap configuration to declare one or more URL patterns which should have no filters applied. Use the name 'none' for these patterns, e.g.

+
+
+
Listing 78. Using none in a filterChain.chainMap configuration
+
+
grails.plugin.springsecurity.filterChain.chainMap = [
+   [pattern: '/someurlpattern/**', filters: 'none'],
+   [pattern: '/**',                filters: 'JOINED_FILTERS']
+]
+
+
+
+
+

15.4. clientRegisterFilter

+
+

An alternative to setting the filterNames property is grails.plugin.springsecurity.SpringSecurityUtils.clientRegisterFilter(). This property allows you to add a custom filter to the chain at a specified position. Each standard filter has a corresponding position in the chain (see grails.plugin.springsecurity.SecurityFilterPosition for details). So if you have created an application-specific filter, register it in grails-app/conf/spring/resources.groovy:

+
+
+
+
import com.mycompany.myapp.MyFilter
+import org.springframework.boot.context.embedded.FilterRegistrationBean
+
+beans = {
+   myFilter(MyFilter) {
+      // properties
+   }
+
+   myFilterDeregistrationBean(FilterRegistrationBean) {
+      filter = ref('myFilter')
+      enabled = false
+   }
+}
+
+
+
+

Note that in addition to the filter bean, there is also a disabled FilterRegistrationBean registered. This is needed because Spring Boot automatically registers filter beans in the ApplicationContext, so you must register your own FilterRegistrationBean and set its enabled property to false to prevent this.

+
+
+

Then register the filter in grails-app/init/BootStrap.groovy:

+
+
+
+
import grails.plugin.springsecurity.SecurityFilterPosition
+import grails.plugin.springsecurity.SpringSecurityUtils
+
+class BootStrap {
+
+   def init = {
+      SpringSecurityUtils.clientRegisterFilter(
+          'myFilter', SecurityFilterPosition.OPENID_FILTER.order + 10)
+   }
+}
+
+
+
+

This bootstrap code registers your filter just after the Open ID filter (if it’s configured). You cannot register a filter in the same position as another, so it’s a good idea to add a small delta to its position to put it after or before a filter that it should be next to in the chain. The Open ID filter position is just an example - add your filter in the position that makes sense.

+
+
+
+
+
+

16. Channel Security

+
+
+

Use channel security to configure which URLs require HTTP and which require HTTPS.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 21. Channel Security configuration options
PropertyDefault ValueMeaning

portMapper.httpPort

8080

HTTP port your application uses

portMapper.httpsPort

8443

HTTPS port your application uses

secureChannel.definition

none

Map of URL pattern to channel rule

secureChannel.secureHeaderName

'X-Forwarded-Proto'

The name of the header to check for HTTPS

secureChannel.secureHeaderValue

'http'

The header value for secureHeaderName that indicates a need to redirect from HTTPS to HTTP

secureChannel.secureConfigAttributeKeyword

'REQUIRES_SECURE_CHANNEL'

The config attribute token to use for marking a pattern as requiring HTTPS.

secureChannel.insecureHeaderName

'X-Forwarded-Proto'

The name of the header to check for HTTP

secureChannel.insecureHeaderValue

'https'

The header value for insecureHeaderName that indicates a need to redirect from HTTP to HTTPS

secureChannel.insecureConfigAttributeKeyword

'REQUIRES_INSECURE_CHANNEL'

The config attribute token to use for marking a pattern as requiring HTTP.

+
+

Build a List of single-entry Maps under the secureChannel.definition key, where URL patterns are stored under the key “pattern”, and the values are stored under the key “access” and are one of the access keywords REQUIRES_SECURE_CHANNEL, REQUIRES_INSECURE_CHANNEL, or ANY_CHANNEL:

+
+
+
Listing 79. Sample grails.plugin.springsecurity.secureChannel.definition
+
+
grails.plugin.springsecurity.secureChannel.definition = [
+   [pattern: '/login/**',        access: 'REQUIRES_SECURE_CHANNEL'],
+   [pattern: '/maps/**',         access: 'REQUIRES_INSECURE_CHANNEL'],
+   [pattern: '/images/login/**', access: 'REQUIRES_SECURE_CHANNEL'],
+   [pattern: '/images/**',       access: 'ANY_CHANNEL']
+]
+
+
+
+ + + + + +
+ + +
+

The format of secureChannel.definition has changed from previous versions to avoid configuration parsing issues. In previous versions the property was a single Map, where the keys were the access patterns and the values were one of the access keywords above. The old format is no longer supported and your configurations must be updated to the newer format.

+
+
+
+
+

URLs are checked in order, so be sure to put more specific rules before less specific. In the preceding example, /images/login/** is more specific than /images/**, so it appears first in the configuration.

+
+
+

16.1. Header checking

+
+

The default implementation of channel security is fairly simple; if you’re using HTTP but HTTPS is required, you get redirected to the corresponding SSL URL and vice versa. But when using a load balancer such as an F5 BIG-IP it’s not possible to just check secure/insecure. In that case you can configure the load balancer to set a request header indicating the current state. To use this approach, set the useHeaderCheckChannelSecurity configuration property to true and optionally change the header names or values:

+
+
+
+
grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true
+
+
+
+

By default the header name is “X-Forwarded-Proto” and the secure header value is “http” (i.e. if you’re not secure, redirect to secure) and the insecure header value is “https” (i.e. if you’re secure, redirect to insecure). You can change any or all of these default values though:

+
+
+
+
grails.plugin.springsecurity.secureChannel.secureHeaderName = '...'
+grails.plugin.springsecurity.secureChannel.secureHeaderValue = '...'
+grails.plugin.springsecurity.secureChannel.insecureHeaderName = '...'
+grails.plugin.springsecurity.secureChannel.insecureHeaderValue = '...'
+
+
+
+
+
+
+

17. IP Address Restrictions

+
+
+

Ordinarily you can guard URLs sufficiently with roles, but the plugin provides an extra layer of security with its ability to restrict by IP address.

+
+ + +++++ + + + + + + + + + + + + + + +
Table 22. IP Address Restriction configuration options
PropertyDefault ValueMeaning

ipRestrictions

none

Map of URL patterns to IP address patterns.

+
+

For example, make an admin-only part of your site accessible only from IP addresses of the local LAN or VPN, such as 192.168.1.xxx or 10.xxx.xxx.xxx. You can also set this up at your firewall and/or routers, but it is convenient to encapsulate it within your application.

+
+
+

To use this feature, specify an ipRestrictions configuration as a List of Maps, one for each combination of URL pattern to IP address patterns that can access those URLs. The IP patterns can be single-value strings, or multi-value lists of strings. They can use CIDR masks, and can specify either IPv4 or IPv6 patterns. For example, given this configuration:

+
+
+
Listing 80. Sample grails.plugin.springsecurity.ipRestrictions configuration
+
+
grails.plugin.springsecurity.ipRestrictions = [
+   [pattern: '/pattern1/**', access: '123.234.345.456'],
+   [pattern: '/pattern2/**', access: '10.0.0.0/8'],
+   [pattern: '/pattern3/**', access: ['10.10.200.42', '10.10.200.63']]
+]
+
+
+
+

pattern1 URLs can be accessed only from the external address 123.234.345.456, pattern2 URLs can be accessed only from a 10.xxx.xxx.xxx intranet address, and pattern3 URLs can be accessed only from 10.10.200.42 or 10.10.200.63. All other URL patterns are accessible from any IP address.

+
+
+ + + + + +
+ + +
+

The format of ipRestrictions has changed from previous versions to avoid configuration parsing issues. In previous versions the property was a single Map, where the keys were the access patterns and the values were the IP addresses that are allowed. The old format is no longer supported and your configurations must be updated to the newer format.

+
+
+
+
+

All addresses can always be accessed from localhost regardless of IP pattern, primarily to support local development mode.

+
+
+ + + + + +
+ + +
+

You cannot compare IPv4 and IPv6 addresses, so if your server supports both, you need to specify the IP patterns using the address format that is actually being used. Otherwise the filter throws exceptions. One option is to set the java.net.preferIPv4Stack system property, for example, by adding it to JAVA_OPTS or GRAILS_OPTS as -Djava.net.preferIPv4Stack=true.

+
+
+
+
+
+
+

18. Session Fixation Prevention

+
+
+

To guard against session-fixation attacks set the useSessionFixationPrevention attribute to true:

+
+
+
+
grails.plugin.springsecurity.useSessionFixationPrevention = true
+
+
+
+

Upon successful authentication a new HTTP session is created and the previous session’s attributes are copied into it. If you start your session by clicking a link that was generated by someone trying to hack your account, which contained an active session id, you are no longer sharing the previous session after login. You have your own session.

+
+
+

Session fixation is less of a problem now that Grails by default does not include jsessionid in URLs (see this JIRA issue), but it’s still a good idea to use this feature.

+
+
+

Note that there is an issue when using the cookie-session plugin; see this issue for more details.

+
+
+

The table shows configuration options for session fixation.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 23. Session Fixation Prevention configuration options
PropertyDefault ValueMeaning

useSessionFixationPrevention

true

Whether to use session fixation prevention

sessionFixationPrevention.migrate

true

Whether to copy the session attributes of the existing session to the new session after login

sessionFixationPrevention.alwaysCreateSession

false

Whether to always create a session even if one did not exist at the start of the request

+
+
+
+

19. Logout Handlers

+
+
+

You register a list of logout handlers by implementing the LogoutHandler interface. The list is called when a user explicitly logs out.

+
+
+

By default, a securityContextLogoutHandler bean is registered to clear the SecurityContextHolder. Also, unless you are using Facebook or OpenID, rememberMeServices bean is registered to reset your cookie. (Facebook and OpenID authenticate externally so we don’t have access to the password to create a remember-me cookie.) If you are using Facebook, a facebookLogoutHandler is registered to reset its session cookies.

+
+
+

To customize this list, you define a logout.handlerNames attribute with a list of bean names.

+
+ + +++++ + + + + + + + + + + + + + + +
Table 24. Logout Handler configuration options
PropertyDefault ValueMeaning

logout.handlerNames

['rememberMeServices', 'securityContextLogoutHandler']

Logout handler bean names

+
+

The beans must be declared either by the plugin or by you in resources.groovy. For example, suppose you have a custom MyLogoutHandler in resources.groovy:

+
+
+
Listing 81. Registering a custom logout handler in resources.groovy
+
+
import com.foo.MyLogoutHandler
+
+beans = {
+   myLogoutHandler(MyLogoutHandler) {
+      // attributes
+   }
+}
+
+
+
+

You register it in grails-app/conf/application.groovy as:

+
+
+
Listing 82. Adding a custom logout handler in grails.plugin.springsecurity.logout.handlerNames
+
+
grails.plugin.springsecurity.logout.handlerNames = [
+   'rememberMeServices', 'securityContextLogoutHandler', 'myLogoutHandler'
+]
+
+
+
+
+
+

20. Voters

+
+
+

Voters are classes that implement the Spring Security AccessDecisionVoter interface and are used to confirm whether a successful authentication is authorized for the current request.

+
+
+

You can register the voters to use with the voterNames setting; each element in the collection is the name of an existing Spring bean.

+
+ + +++++ + + + + + + + + + + + + + + +
Table 25. Voters configuration options
PropertyDefault ValueMeaning

voterNames

['authenticatedVoter', 'roleVoter', 'webExpressionVoter', 'closureVoter']

Bean names of voters

+
+

The default voters include a RoleHierarchyVoter to ensure users have the required roles for the request, an AuthenticatedVoter to support IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED, and IS_AUTHENTICATED_ANONYMOUSLY tokens, a WebExpressionVoter to evaluate SpEL expressions, and a grails.plugin.springsecurity.access.vote.ClosureVoter to invoke annotation closures.

+
+
+

To customize this list, you define a voterNames attribute with a list of bean names. Any existing bean that implements the interface can be used, whether it is declared by this plugin, in your application’s resources.groovy, another plugin, or any other source.

+
+
+

Suppose you have registered a bean for a custom MyAccessDecisionVoter in resources.groovy:

+
+
+
+
import com.foo.MyAccessDecisionVoter
+
+beans = {
+   myAccessDecisionVoter(MyAccessDecisionVoter) {
+      // attributes
+   }
+}
+
+
+
+

You register it in grails-app/conf/application.groovy as:

+
+
+
+
grails.plugin.springsecurity.voterNames = [
+   'authenticatedVoter', 'roleVoter', 'webExpressionVoter',
+   'closureVoter', 'myAccessDecisionVoter'
+]
+
+
+
+
+
+

21. Miscellaneous Properties

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 26. Miscellaneous Properties
PropertyDefault ValueMeaning

active

true

Whether the plugin is enabled

printStatusMessages

true

Whether to print status messages such as “Configuring Spring Security Core …​”

rejectIfNoRule

true

“strict” mode where a request mapping is required for all resources; if true make sure to allow permitAll for “/”, “/js/**”, “/css/**”, “/images/**”, “/login/**”, “/logout/**”, and so on

anon.key

“foo”

anonymousProcessingFilter key

atr.anonymousClass

grails.plugin.springsecurity.authentication. GrailsAnonymousAuthenticationToken

Anonymous token class

useHttpSession EventPublisher

false

If true, an HttpSession EventPublisher will be configured

cacheUsers

false

If true, logins are cached using an EhCache. See “Account Locking and Forcing Password Change”, under “User Cache”: Account Locking and Forcing Password Change

useSecurity EventListener

false

If true, configure SecurityEventListener. See Events

dao.reflectionSaltSourceProperty

none

Which property to use for the reflection-based salt source. See Salted Passwords

dao.hideUserNotFoundExceptions

true

if true, throws a new BadCredentialsException if a username is not found or the password is incorrect, but if false re-throws the UsernameNot FoundException thrown by UserDetailsService (considered less secure than throwing BadCredentialsException for both exceptions)

requestCache.createSession

true

Whether caching SavedRequest can trigger the creation of a session

roleHierarchy

none

Hierarchical role definition. See Hierarchical Roles

voterNames

['authenticatedVoter', 'roleVoter', 'closureVoter']

Bean names of voters. See Voters

providerNames

['daoAuthenticationProvider', 'anonymousAuthenticationProvider', 'rememberMeAuthenticationProvider']

Bean names of authentication providers. See Authentication Providers

securityConfigType

“Annotation”

Type of request mapping to use, one of “Annotation”, “Requestmap”, or “InterceptUrlMap” (or the corresponding enum value from SecurityConfigType). See Configuring Request Mappings to Secure URLs

controllerAnnotations.lowercase

true

Whether to do URL comparisons using lowercase

controllerAnnotations.staticRules

none

Extra rules that cannot be mapped using annotations

interceptUrlMap

none

Request mapping definition when using “InterceptUrlMap”. See Static Map

registerLoggerListener

false

If true, registers a LoggerListener that logs interceptor-related application events

scr.allowSessionCreation

true

Whether to allow creating a session in the securityContextRepository bean

scr.disableUrlRewriting

true

Whether to disable URL rewriting (and the jsessionid attribute)

scr.springSecurityContextKey

HttpSessionSecurityContextRepository. SPRING_SECURITY_CONTEXT_KEY

The HTTP session key to store the SecurityContext under

scpf.forceEagerSessionCreation

false

Whether to eagerly create a session in the securityContextRepository bean

sch.strategyName

SecurityContextHolder.MODE_THREADLOCAL

The strategy to use for storing the SecurityContext - can be one of MODE_THREADLOCAL, MODE_INHERITABLETHREADLOCAL, or MODE_GLOBAL, or the name of a class implementing SecurityContextHolderStrategy

debug.useFilter

false

Whether to use the DebugFilter to log request debug information to the console

providerManager.eraseCredentialsAfterAuthentication

true

Whether to remove the password from the Authentication and its child objects after successful authentication

+
+
+
+

22. Tutorials

+
+
+

22.1. Using Controller Annotations to Secure URLs

+
+

22.1.1. 1. Create your Grails application.

+
+
+
$ grails create-app bookstore
+$ cd bookstore
+
+
+
+
+

22.1.2. 2. “Install” the plugin by adding it to build.gradle

+
+
+
dependencies {
+   ...
+   compile 'org.grails.plugins:spring-security-core:{project-version}'
+   ...
+}
+
+
+
+

Run the compile command to resolve dependencies and ensure everything is correct:

+
+
+
+
$ grails compile
+
+
+
+
+

22.1.3. 3. Create the User and Role domain classes.

+
+
+
./gradlew runCommand "-Pargs=s2-quickstart com.mycompany.myapp User Role"
+
+
+
+

You can choose your names for your domain classes and package; these are just examples.

+
+
+ + + + + +
+ + +
+

Depending on your database, some domain class names might not be valid, especially those relating to security. Before you create names like “User” or “Group”, make sure they are not reserved keywords in your database, or escape the name with backticks in the mapping block, e.g.

+
+
+
+
static mapping = {
+   table '`user`'
+}
+
+
+
+
+
+

If you are using Spring Core version 3.1.2 or later and GORM 6.0.10 or later, the script creates this User class:

+
+
+
grails-app/domain/com/mycompany/myapp/User.groovy
+
+
package com.mycompany.myapp
+
+import groovy.transform.EqualsAndHashCode
+import groovy.transform.ToString
+import grails.compiler.GrailsCompileStatic
+
+@GrailsCompileStatic
+@EqualsAndHashCode(includes='username')
+@ToString(includes='username', includeNames=true, includePackage=false)
+class User implements Serializable {
+
+	private static final long serialVersionUID = 1
+
+	String username
+	String password
+	boolean enabled = true
+	boolean accountExpired
+	boolean accountLocked
+	boolean passwordExpired
+
+	Set<Role> getAuthorities() {
+		(UserRole.findAllByUser(this) as List<UserRole>)*.role as Set<Role>
+	}
+
+	static constraints = {
+		password blank: false, password: true
+		username blank: false, unique: true
+	}
+
+	static mapping = {
+		password column: '`password`'
+	}
+}
+
+
+
+

and a password encoder listener to manage password encoding:

+
+
+
grails-app/conf/spring/resources.groovy
+
+
import com.mycompany.myapp.UserPasswordEncoderListener
+// Place your Spring DSL code here
+beans = {
+    userPasswordEncoderListener(UserPasswordEncoderListener)
+}
+
+
+
+
src/main/groovy/com/mycompany/myapp/UserPasswordEncoderListener.groovy
+
+
package com.mycompany.myapp
+
+import grails.plugin.springsecurity.SpringSecurityService
+import org.grails.datastore.mapping.engine.event.AbstractPersistenceEvent
+import org.grails.datastore.mapping.engine.event.PreInsertEvent
+import org.grails.datastore.mapping.engine.event.PreUpdateEvent
+import org.springframework.beans.factory.annotation.Autowired
+import grails.events.annotation.gorm.Listener
+import groovy.transform.CompileStatic
+
+@CompileStatic
+class UserPasswordEncoderListener {
+
+    @Autowired
+    SpringSecurityService springSecurityService
+
+    @Listener(User)
+    void onPreInsertEvent(PreInsertEvent event) {
+        encodePasswordForEvent(event)
+    }
+
+    @Listener(User)
+    void onPreUpdateEvent(PreUpdateEvent event) {
+        encodePasswordForEvent(event)
+    }
+
+    private void encodePasswordForEvent(AbstractPersistenceEvent event) {
+        if (event.entityObject instanceof User) {
+            User u = event.entityObject as User
+            if (u.password && ((event instanceof  PreInsertEvent) || (event instanceof PreUpdateEvent && u.isDirty('password')))) {
+                event.getEntityAccess().setProperty('password', encodePassword(u.password))
+            }
+        }
+    }
+
+    private String encodePassword(String password) {
+        springSecurityService?.passwordEncoder ? springSecurityService.encodePassword(password) : password
+    }
+}
+
+
+
+

Previous versions of the plugin’s script manage the password encoding directly in domain class:

+
+
+
grails-app/domain/com/mycompany/myapp/User.groovy
+
+
package com.mycompany.myapp
+
+import grails.plugin.springsecurity.SpringSecurityService
+import groovy.transform.EqualsAndHashCode
+import groovy.transform.ToString
+import grails.compiler.GrailsCompileStatic
+
+@GrailsCompileStatic
+@EqualsAndHashCode(includes='username')
+@ToString(includes='username', includeNames=true, includePackage=false)
+class User implements Serializable {
+
+	private static final long serialVersionUID = 1
+
+	SpringSecurityService springSecurityService
+
+	String username
+	String password
+	boolean enabled = true
+	boolean accountExpired
+	boolean accountLocked
+	boolean passwordExpired
+
+	Set<Role> getAuthorities() {
+		(UserRole.findAllByUser(this) as List<UserRole>)*.role as Set<Role>
+	}
+
+	def beforeInsert() {
+		encodePassword()
+	}
+
+	def beforeUpdate() {
+		if (isDirty('password')) {
+			encodePassword()
+		}
+	}
+
+	protected void encodePassword() {
+		password = springSecurityService?.passwordEncoder ? springSecurityService.encodePassword(password) : password
+	}
+
+	static transients = ['springSecurityService']
+
+	static constraints = {
+		password blank: false, password: true
+		username blank: false, unique: true
+	}
+
+	static mapping = {
+		password column: '`password`'
+	}
+}
+
+
+
+ + + + + +
+ + +Service injection in GORM entities is disabled by default since Grails 3.2.8. Read documentation about Spring Autowiring of Domain Instances to learn how to turn autowire on. +
+
+
+

s2-quickstart script generates this Role too:

+
+
+
Role.groovy
+
+
package com.mycompany.myapp
+
+import groovy.transform.EqualsAndHashCode
+import groovy.transform.ToString
+import grails.compiler.GrailsCompileStatic
+
+@GrailsCompileStatic
+@EqualsAndHashCode(includes='authority')
+@ToString(includes='authority', includeNames=true, includePackage=false)
+class Role implements Serializable {
+
+	private static final long serialVersionUID = 1
+
+	String authority
+
+	static constraints = {
+		authority blank: false, unique: true
+	}
+
+	static mapping = {
+		cache true
+	}
+}
+
+
+
+

and a domain class that maps the many-to-many join class, UserRole:

+
+
+
UserRole.groovy
+
+
package com.mycompany.myapp
+
+import grails.gorm.DetachedCriteria
+import groovy.transform.ToString
+
+import org.codehaus.groovy.util.HashCodeHelper
+import grails.compiler.GrailsCompileStatic
+
+@GrailsCompileStatic
+@ToString(cache=true, includeNames=true, includePackage=false)
+class UserRole implements Serializable {
+
+	private static final long serialVersionUID = 1
+
+	User user
+	Role role
+
+	@Override
+	boolean equals(other) {
+		if (other instanceof UserRole) {
+			other.userId == user?.id && other.roleId == role?.id
+		}
+	}
+
+    @Override
+	int hashCode() {
+	    int hashCode = HashCodeHelper.initHash()
+        if (user) {
+            hashCode = HashCodeHelper.updateHash(hashCode, user.id)
+		}
+		if (role) {
+		    hashCode = HashCodeHelper.updateHash(hashCode, role.id)
+		}
+		hashCode
+	}
+
+	static UserRole get(long userId, long roleId) {
+		criteriaFor(userId, roleId).get()
+	}
+
+	static boolean exists(long userId, long roleId) {
+		criteriaFor(userId, roleId).count()
+	}
+
+	private static DetachedCriteria criteriaFor(long userId, long roleId) {
+		UserRole.where {
+			user == User.load(userId) &&
+			role == Role.load(roleId)
+		}
+	}
+
+	static UserRole create(User user, Role role, boolean flush = false) {
+		def instance = new UserRole(user: user, role: role)
+		instance.save(flush: flush)
+		instance
+	}
+
+	static boolean remove(User u, Role r) {
+		if (u != null && r != null) {
+			UserRole.where { user == u && role == r }.deleteAll()
+		}
+	}
+
+	static int removeAll(User u) {
+		u == null ? 0 : UserRole.where { user == u }.deleteAll() as int
+	}
+
+	static int removeAll(Role r) {
+		r == null ? 0 : UserRole.where { role == r }.deleteAll() as int
+	}
+
+	static constraints = {
+		role validator: { Role r, UserRole ur ->
+			if (ur.user?.id) {
+				UserRole.withNewSession {
+					if (UserRole.exists(ur.user.id, r.id)) {
+						return ['userRole.exists']
+					}
+				}
+			}
+		}
+	}
+
+	static mapping = {
+		id composite: ['user', 'role']
+		version false
+	}
+}
+
+
+
+ + + + + +
+ + +
+

These generated files are not part of the plugin - these are your application files. +They are examples to get you started, so you can edit them as you please. +They contain the minimum needed for the plugin’s default implementation of the Spring Security UserDetailsService +(which like everything in the plugin is customizable - see Custom UserDetailsService).

+
+
+
+
+

The script has edited (or created) grails-app/conf/application.groovy and added the configuration for your domain classes. Make sure that the changes are correct.

+
+
+

While you’re looking at application.groovy, add this config override to make the sample app easier to work with:

+
+
+
+
grails.plugin.springsecurity.logout.postOnly = false
+
+
+
+ + + + + +
+ + +
+

By default only POST requests can be used to logout; this is a very sensible default and shouldn’t be changed in most cases. However to keep things simple for this tutorial we’ll change it (using the logout.postOnly config override above) to avoid having to create a GSP form that POSTs to /logout.

+
+
+
+
+

The plugin has no support for CRUD actions or GSPs for your domain classes; the spring-security-ui plugin supplies a UI for those. So for now you will create roles and users in grails-app/init/BootStrap.groovy. (See step 7.)

+
+
+
+

22.1.4. 4. Create a controller that will be restricted by role.

+
+
+
$ grails create-controller com.mycompany.myapp.Secure
+
+
+
+

This command creates grails-app/controllers/com/mycompany/myapp/SecureController.groovy. Add some output so you can verify that things are working:

+
+
+
SecureController.groovy
+
+
package com.mycompany.myapp
+
+class SecureController {
+   def index() {
+      render 'Secure access only'
+   }
+}
+
+
+
+
+

22.1.5. 5. Edit grails-app/init/BootStrap.groovy to add a test user.

+
+
BootStrap.groovy
+
+
package com.mycompany.myapp
+
+import grails.gorm.transactions.Transactional
+
+class BootStrap {
+    def init = {
+        addTestUser()
+    }
+
+    @Transactional
+    void addTestUser() {
+        def adminRole = new Role(authority: 'ROLE_ADMIN').save()
+
+        def testUser = new User(username: 'me', password: 'password').save()
+
+        UserRole.create testUser, adminRole
+
+        UserRole.withSession {
+            it.flush()
+            it.clear()
+        }
+
+        assert User.count() == 1
+        assert Role.count() == 1
+        assert UserRole.count() == 1
+    }
+}
+
+
+
+

Some things to note about the preceding BootStrap.groovy:

+
+
+
    +
  • +

    The example does not use a traditional GORM many-to-many mapping for the User <==> Role relationship; instead you are mapping the join table with the UserRole class. This performance optimization helps significantly when many users have one or more common roles.

    +
  • +
  • +

    We explicitly flush (using withSession) because BootStrap does not run in a transaction or OpenSessionInView.

    +
  • +
+
+
+
+

22.1.6. 6. Start the server.

+
+
+
$ grails run-app
+
+
+
+
+

22.1.7. 7. Verify that you cannot access the page yet.

+
+

Before you secure the page, navigate to http://localhost:8080/secure to verify that you cannot access the page yet. You will be redirected to the login page, but after a successful authentication (log in with the username and password you used for the test user in BootStrap.groovy) you will see an error page:

+
+
+
+
Sorry, you're not authorized to view this page.
+
+
+
+

This is because with the default configuration, all URLs are denied unless there is an access rule specified.

+
+
+
+

22.1.8. 8. Apply the annotation.

+
+

Edit grails-app/controllers/com/mycompany/myapp/SecureController.groovy to import the annotation class and apply the annotation to restrict (and grant) access.

+
+
+
SecureController.groovy
+
+
package com.mycompany.myapp
+
+import grails.plugin.springsecurity.annotation.Secured
+
+class SecureController {
+   @Secured('ROLE_ADMIN')
+   def index() {
+      render 'Secure access only'
+   }
+}
+
+
+
+

or

+
+
+
SecureController.groovy
+
+
package com.mycompany.myapp
+
+import grails.plugin.springsecurity.annotation.Secured
+
+@Secured('ROLE_ADMIN')
+class SecureController {
+   def index() {
+      render 'Secure access only'
+   }
+}
+
+
+
+

You can annotate the entire controller or individual actions. In this case you have only one action, so you can do either.

+
+
+
+

22.1.9. 9. Restart.

+
+

Shut down the app and run grails run-app again, and navigate again to http://localhost:8080/secure.

+
+
+

This time you should again be able to see the secure page after successfully authenticating.

+
+
+
+

22.1.10. 10. Test the Remember Me functionality.

+
+

Check the checkbox, and once you’ve tested the secure page, close your browser and reopen it. Navigate again the the secure page. Because a cookie is stored, you should not need to log in again. Logout at any time by navigating to http://localhost:8080/logout.

+
+
+
+

22.1.11. 11. Create a CRUD UI.

+
+

Optionally, create a CRUD UI to work with users and roles.

+
+
+
Run grails generate-all for the domain classes:
+
+
+
$ grails generate-all com.mycompany.myapp.User
+
+
+
+
+
$ grails generate-all com.mycompany.myapp.Role
+
+
+
+

Since the User domain class handles password hashing, there are no changes required in the generated controllers.

+
+
+

Be sure to add an @Secured annotation to both of the generated controllers to make them accessible.

+
+
+
+
+
+
+
+

23. Example Applications

+
+
+

Sometimes the best way to learn is by example. We have an ever-expanding list of example apps created to do just that…​ help you learn how to utilize the grails-spring-security-core plugin in your current application.

+
+
+

23.1. The Repos

+
+

A comprehensive list of example spring security apps may be found at:

+
+ +
+
+

23.2. The Example Apps

+
+

23.2.1. spring-security-ui

+
+

A sample Grails App which uses the Grails Spring Security UI and Spring Security Core Plugins.

+
+
+

The Spring Security UI plugin provides CRUD screens and other user management workflows.

+
+ +
+
+

23.2.2. grails-spring-security-spring-boot-actuators

+
+

A sample Grails App which secures a Spring Boot Actuator endpoint using the Spring Security Core Plugin.

+
+
+

Spring Boot Actuators provide ways to monitor the health and performance of your application along with other metadata information.

+
+ +
+
+

23.2.3. grails-ssc-mongodb

+
+

A sample Grails App which uses the Spring Security Core Plugin and MongoDB.

+
+
+

MongoDB is an open source, document-oriented database.

+
+ +
+
+

23.2.4. grails-spring-security-params

+
+

A sample Grails App which uses the Spring Security Core Plugin to demonstrate how to use a closure with the @Secured annotation.

+
+ +
+
+

23.2.5. grails-spring-security-group

+
+

A sample Grails App which uses the Spring Security Core Plugin and Group Authentication as described in the documentation.

+
+
+

Rather than granting authorities directly to a “person”, you can create a “group”, map authorities to it, and then map a “person” to that “group”. For applications that have a one or more groups of users who need the same level of access, having one or more “group” instances makes managing changes to access levels easier.

+
+ +
+
+

23.2.6. grails-spring-security-hierarchical-roles

+
+

A sample Grails App which uses the Spring Security Core Plugin and Hierarchical Roles as described in the documentation.

+
+
+

Hierarchical roles are a convenient way to reduce clutter in your request mappings.

+
+ +
+
+

23.2.7. grails-spring-security-ajax

+
+

A sample Grails App which uses the Spring Security Core Plugin and Ajax Authentication as described in the documentation.

+
+
+

The Spring Security Core Plugin supports Ajax logins, but you need to create your own client-side code.

+
+ +
+
+
+
+
+

24. Controller Methods

+
+
+

The plugin registers some convenience methods into all controllers in your application. As of version 3.1.0 this is implemented by a trait that is applied to all controllers but was implemented in earlier versions by adding methods to each controller’s MetaClass. All are accessor methods, so they can be called as methods or properties. They include:

+
+
+

24.1. isLoggedIn

+
+

Returns true if there is an authenticated user.

+
+
+
Listing 83. Example use of isLoggedIn()
+
+
class MyController {
+
+   def someAction() {
+      if (isLoggedIn()) {
+         ...
+      }
+
+      ...
+
+      if (!isLoggedIn()) {
+         ...
+      }
+
+      // or
+
+      if (loggedIn) {
+         ...
+      }
+
+      if (!loggedIn) {
+         ...
+      }
+   }
+}
+
+
+
+
+

24.2. getPrincipal

+
+

Retrieves the current authenticated user’s Principal (a GrailsUser instance unless you’ve customized this) or null if not authenticated.

+
+
+
Listing 84. Example use of getPrincipal()
+
+
class MyController {
+
+   def someAction() {
+      if (isLoggedIn()) {
+         String username = getPrincipal().username
+         ...
+      }
+
+      // or
+
+      if (isLoggedIn()) {
+         String username = principal.username
+         ...
+      }
+   }
+}
+
+
+
+
+

24.3. getAuthenticatedUser

+
+

Loads the user domain class instance from the database that corresponds to the currently authenticated user, or null if not authenticated. This is the equivalent of adding a dependency injection for springSecurityService and calling PersonDomainClassName.get(springSecurityService.principal.id) (the typical way that this is often done).

+
+
+
Listing 85. Example use of getAuthenticatedUser()
+
+
class MyController {
+
+   def someAction() {
+      if (isLoggedIn()) {
+         String email = getAuthenticatedUser().email
+         ...
+      }
+
+      // or
+
+      if (isLoggedIn()) {
+         String email = authenticatedUser.email
+         ...
+      }
+   }
+}
+
+
+
+
+
+
+

25. Internationalization

+
+
+

The plugin includes i18n messages in several languages. To customize or translate these, add messages for the following keys to your i18n resource bundle(s) for each exception:

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 27. i18n messages for exceptions
MessageDefault ValueException

springSecurity.errors.login.expired

“Sorry, your account has expired.”

AccountExpiredException

springSecurity.errors.login.passwordExpired

“Sorry, your password has expired.”

CredentialsExpiredException

springSecurity.errors.login.disabled

“Sorry, your account is disabled.”

DisabledException

springSecurity.errors.login.locked

“Sorry, your account is locked.”

LockedException

springSecurity.errors.login.fail

“Sorry, we were not able to find a user with that username and password.”

Other exceptions

+
+

You can customize all messages in auth.gsp and denied.gsp:

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 28. i18n messages for GSPs
MessageDefault Value

springSecurity.login.title

“Login”

springSecurity.login.header

“Please Login”

springSecurity.login.button

“Login”

springSecurity.login.username.label

“Username”

springSecurity.login.password.label

“Password”

springSecurity.login.remember.me.label

“Remember me”

springSecurity.denied.title

“Denied”

springSecurity.denied.message

“Sorry, you’re not authorized to view this page.”

+
+
+
+

26. Scripts

+
+
+

26.1. s2-quickstart

+
+
Purpose
+

Creates a user and role class (and optionally a requestmap class) in the specified package. +If you specify a role-group name with the groupClassName argument, role/group classes will also be generated. +If you specify the uiOnly flag, no domain classes are created but the plugin settings are initialized (useful with LDAP, Mock, Shibboleth, etc.)

+
+
+

The general format is:

+
+
+
+
./gradlew runCommand "-Pargs=s2-quickstart DOMAIN_CLASS_PACKAGE USER_CLASS_NAME ROLE_CLASS_NAME [REQUESTMAP_CLASS_NAME] [--groupClassName=GROUP_CLASS_NAME]"
+
+
+
+
Examples
+
+
./gradlew runCommand "-Pargs=s2-quickstart com.yourapp User Role"
+
+
+
+
+
./gradlew runCommand "-Pargs=s2-quickstart com.yourapp User Role --groupClassName=RoleGroup"
+
+
+
+
+
./gradlew runCommand "-Pargs=s2-quickstart com.yourapp Person Authority Requestmap"
+
+
+
+
+
./gradlew runCommand "-Pargs=s2-quickstart --uiOnly"
+
+
+
+
Description
+
    +
  • +

    Updates grails-app/conf/application.groovy with security configuration settings and creates domain classes in grails-app/domain unless the uiOnly flag is specified

    +
  • +
+
+
+
+

26.2. s2-create-persistent-token

+
+
Purpose
+

Creates a persistent token domain class for storing remember-me cookie information in the database. The general format is:

+
+
+
+
./gradlew runCommand "-Pargs=s2-create-persistent-token <classname>"
+
+
+
+
Example
+
+
./gradlew runCommand "-Pargs=s2-create-persistent-token com.yourapp.PersistentLogin"
+
+
+
+
Description
+

This creates the domain class in the specified package, and also registers the name in grails-app/conf/application.groovy, along with enabling persistent remember-me.

+
+
+
+

26.3. s2-create-role-hierarchy-entry

+
+
Purpose
+

Creates a persistent role hierarchy entry domain class for storing role hierarchy information in the database. The general format is:

+
+
+
+
./gradlew runCommand "-Pargs=s2-create-role-hierarchy-entry <classname>"
+
+
+
+
Example
+
+
./gradlew runCommand "-Pargs=s2-create-role-hierarchy-entry com.yourapp.RoleHierarchyEntry"
+
+
+
+
Description
+

This creates the domain class in the specified package, and also registers the name in grails-app/conf/application.groovy, along with enabling persistent role hierarchy storage and lookup.

+
+
+
+
+
+

27. Debugging

+
+
+

If you need debug information, you can specify the following entries in logback.groovy:

+
+
+
grails-app/conf/logback.groovy
+
+
logger 'org.springframework.security', DEBUG, ['STDOUT'], false
+logger 'grails.plugin.springsecurity', DEBUG, ['STDOUT'], false
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/6.0.x/ghpages.html b/6.0.x/ghpages.html index ae8c158af..7977f54c3 100644 --- a/6.0.x/ghpages.html +++ b/6.0.x/ghpages.html @@ -82,9 +82,9 @@

Spring Security Core Plugin - Documentation

-

Grails 6.0.1 and beyond

+

Grails 6.0.2 and beyond

Grails 4.0.x and beyond

@@ -108,7 +108,7 @@

Grails 3.0.x, 3.1.x, 3.2.x

  • User guide
  • User guide PDF
  • User guide EPUB
  • - +

    Documentation (version 2.0.x)

    diff --git a/6.0.x/groovydoc/deprecated-list.html b/6.0.x/groovydoc/deprecated-list.html index dae6542fb..8b53102b2 100644 --- a/6.0.x/groovydoc/deprecated-list.html +++ b/6.0.x/groovydoc/deprecated-list.html @@ -24,7 +24,7 @@ - Deprecated API (spring-security-core 6.0.1 API) + Deprecated API (spring-security-core 6.0.2 API) @@ -34,7 +34,7 @@ diff --git a/6.0.x/groovydoc/grails.plugin.springsecurity/CommandLineHelper.html b/6.0.x/groovydoc/grails.plugin.springsecurity/CommandLineHelper.html index 231ae2294..35481a4c4 100644 --- a/6.0.x/groovydoc/grails.plugin.springsecurity/CommandLineHelper.html +++ b/6.0.x/groovydoc/grails.plugin.springsecurity/CommandLineHelper.html @@ -27,7 +27,7 @@ - CommandLineHelper (spring-security-core 6.0.1 API) + CommandLineHelper (spring-security-core 6.0.2 API) @@ -37,7 +37,7 @@ diff --git a/6.0.x/groovydoc/grails.plugin.springsecurity/S2CreatePersistentTokenCommand.html b/6.0.x/groovydoc/grails.plugin.springsecurity/S2CreatePersistentTokenCommand.html index 687e791a8..9a84d16fd 100644 --- a/6.0.x/groovydoc/grails.plugin.springsecurity/S2CreatePersistentTokenCommand.html +++ b/6.0.x/groovydoc/grails.plugin.springsecurity/S2CreatePersistentTokenCommand.html @@ -27,7 +27,7 @@ - S2CreatePersistentTokenCommand (spring-security-core 6.0.1 API) + S2CreatePersistentTokenCommand (spring-security-core 6.0.2 API) @@ -37,7 +37,7 @@ diff --git a/6.0.x/groovydoc/grails.plugin.springsecurity/S2CreateRoleHierarchyEntryCommand.html b/6.0.x/groovydoc/grails.plugin.springsecurity/S2CreateRoleHierarchyEntryCommand.html index a7a7c23e7..1e5bc91ad 100644 --- a/6.0.x/groovydoc/grails.plugin.springsecurity/S2CreateRoleHierarchyEntryCommand.html +++ b/6.0.x/groovydoc/grails.plugin.springsecurity/S2CreateRoleHierarchyEntryCommand.html @@ -27,7 +27,7 @@ - S2CreateRoleHierarchyEntryCommand (spring-security-core 6.0.1 API) + S2CreateRoleHierarchyEntryCommand (spring-security-core 6.0.2 API) @@ -37,7 +37,7 @@ diff --git a/6.0.x/groovydoc/grails.plugin.springsecurity/S2QuickstartCommand.html b/6.0.x/groovydoc/grails.plugin.springsecurity/S2QuickstartCommand.html index 5b4ec5ba8..ee1c273bf 100644 --- a/6.0.x/groovydoc/grails.plugin.springsecurity/S2QuickstartCommand.html +++ b/6.0.x/groovydoc/grails.plugin.springsecurity/S2QuickstartCommand.html @@ -27,7 +27,7 @@ - S2QuickstartCommand (spring-security-core 6.0.1 API) + S2QuickstartCommand (spring-security-core 6.0.2 API) @@ -37,7 +37,7 @@ diff --git a/6.0.x/groovydoc/grails.plugin.springsecurity/SkipBootstrap.html b/6.0.x/groovydoc/grails.plugin.springsecurity/SkipBootstrap.html index 873756680..cb82fb15a 100644 --- a/6.0.x/groovydoc/grails.plugin.springsecurity/SkipBootstrap.html +++ b/6.0.x/groovydoc/grails.plugin.springsecurity/SkipBootstrap.html @@ -27,7 +27,7 @@ - SkipBootstrap (spring-security-core 6.0.1 API) + SkipBootstrap (spring-security-core 6.0.2 API) @@ -37,7 +37,7 @@ diff --git a/6.0.x/groovydoc/grails.plugin.springsecurity/package-summary.html b/6.0.x/groovydoc/grails.plugin.springsecurity/package-summary.html index a916e792b..cc69bfcef 100644 --- a/6.0.x/groovydoc/grails.plugin.springsecurity/package-summary.html +++ b/6.0.x/groovydoc/grails.plugin.springsecurity/package-summary.html @@ -22,7 +22,7 @@ -grails.plugin.springsecurity (spring-security-core 6.0.1 API) +grails.plugin.springsecurity (spring-security-core 6.0.2 API) @@ -31,7 +31,7 @@