# thymeleaf-extras-springsecurity **Repository Path**: rsl-pro/thymeleaf-extras-springsecurity ## Basic Information - **Project Name**: thymeleaf-extras-springsecurity - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: 2.0-dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-02-09 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README Thymeleaf - Spring Security 3 integration module ================================================ ------------------------------------------------------------------------------ **[Please make sure to select the branch corresponding to the version of Thymeleaf you are using]** Status ------ This is a *thymeleaf extras* module, not a part of the Thymeleaf core (and as such following its own versioning schema), but fully supported by the Thymeleaf team. Current versions: * **Version 2.0.2** - for Thymeleaf 2.0 (requires 2.0.20+) License ------- This software is licensed under the [Apache License 2.0] (http://www.apache.org/licenses/LICENSE-2.0.html). Requirements ------------ * Thymeleaf **2.0.20+** * Spring Framework version **3.0.x**, **3.1.x**, **3.2.x**, **4.0.x** * Spring Security version **3.0.x**, **3.1.1+**, **3.2.x** * Web environment (Spring Security integration cannot work offline) Maven info ---------- * groupId: `org.thymeleaf.extras` * artifactId: `thymeleaf-extras-springsecurity3` Distribution packages --------------------- Distribution packages (binaries + sources + javadoc) can be downloaded from [SourceForge](http://sourceforge.net/projects/thymeleaf/files/thymeleaf-extras-springsecurity3/). Features -------- This module provides a new dialect called `org.thymeleaf.extras.springsecurity3.dialect.SpringSecurityDialect`, with default prefix `sec`. It includes: * New expression utility objects: * `#authentication` representing the Spring Security authentication object (an object implementing the `org.springframework.security.core.Authentication` interface). * `#authorization`: a expression utility object with methods for checking authorization based on expressions, URLs and Access Control Lists. * New attributes: * `sec:authentication="prop"` outputs a `prop` property of the authentication object, similar to the Spring Security `` JSP tag. * `sec:authorize="expr"` or `sec:authorize-expr="expr"` renders the element children (*tag content*) if the authenticated user is authorized to see it according to the specified *Spring Security expression*. * `sec:authorize-url="url"` renders the element children (*tag content*) if the authenticated user is authorized to see the specified URL. * `sec:authorize-acl="object :: permissions"` renders the element children (*tag content*) if the authenticated user has the specified permissions on the specified domain object, according to Spring Source's Access Control List system. ------------------------------------------------------------------------------ Configuration ------------- In order to use the thymeleaf-extras-springsecurity3 module in your Spring MVC application, we will first need to configure our application in the usual way for Spring + Thymeleaf applications (*TemplateEngine* bean, *template resolvers*, etc.), and add the SpringSecurity dialect to our Template Engine so that we can use the `sec:*` attributes and special expression utility objects: ```xml ... ... ``` And that's all! Using the expression utility objects ------------------------------------ The `#authentication` object can be easily used, like this: ```html
The value of the "name" property of the authentication object should appear here.
``` The `#authorization` object can be used in a similar way, normally in `th:if` or `th:unless`tags: ```html
This will only be displayed if authenticated user has role ROLE_ADMIN.
``` The `#authorization` object is an instance of `org.thymeleaf.extras.springsecurity3.auth.Authorization`, see this class and its documentation to understand all the methods offered. Using the attributes -------------------- Using the `sec:authentication` attribute is equivalent to using the `#authentication` object, but using its own attribute: ```html
The value of the "name" property of the authentication object should appear here.
``` The `sec:authorize` and `sec:authorize-expr` attributes are exactly the same. They work equivalently to a `th:if` that evaluated an `#authorization.expression(...)` expression, by evaluating a *Spring Security Expression*: ```html
This will only be displayed if authenticated user has role ROLE_ADMIN.
``` These *Spring Security Expressions* in `sec:authorize` attributes are in fact Spring EL expressions evaluated on a SpringSecurity-specific root object containing methods such as `hasRole(...)`, `getPrincipal()`, etc. As with normal Spring EL expressions, Thymeleaf allows you to access a series of objects from them including the context variables map (the `#vars` object). In fact, you are allowed to surround your access expression with `${...}` if it makes you feel more comfortable: ```html
This will only be displayed if authenticated user has a role computed by the controller.
``` Remember that Spring Security sets a special security-oriented object as expression root, which is why you would not be able to access the `expectedRole` variable directly in the above expression. Another way of checking authorization is `sec:authorize-url`, which allows you to check whether a user is authorized to visit a specific URL or not: ```html
This will only be displayed if authenticated user can call the "/admin" URL.
``` For specifying a specific HTTP method, do: ```html
This will only be displayed if authenticated user can call the "/admin" URL using the POST HTTP method.
``` Finally, there is an attribute for checking authorization using Spring Security's *Access Control Lists*, which needs the specification of a domain object and the *permissions* defined on it that we are asking for. ```html
This will only be displayed if authenticated user has permissions "1" and "3" on domain object referenced by context variable "obj".
``` In this attribute, both domain object and permission specifications are considered to be thymeleaf *Standard Expressions*.