[Spring boot + Spring Security] Role

1. Prepare Tools

  • IDE: Netbean 8.2
  • JDK: 1.8
  • Maven: 3.5.0

2. Target

Build project thỏa mãn các yêu cầu sau:

  • Sử dụng spring boot + spring security
    
  • Chỉ role ADMIN được access link /admin, role USER được access link /user
    
  • Sử dụng annotation configuration thay cho xml configuration.
    

3. Maven dependency

        <!-- Core starter, including auto-configuration support, logging and YAML -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!-- Starter for using Spring Security -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <!-- Starter for building web, including RESTful, applications using Spring MVC. Uses Tomcat as the default embedded container -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

4. Project setup and description

1. Basic Project

https://viblo.asia/p/spring-boot-spring-security-basic-project-1VgZvEmpKAw

2. EnableGlobalMethodSecurity

Spring hỗ trợ 3 kiểu phần quyền theo role.

  • prePostEnabled: Cho phép phân quyền sử dụng annotation@PreAuthorize/@PostAuthorize - annotation của spring
  • securedEnabled: Cho phép phân quyền sử dụng annotation @Secured - annotation của spring
  • jsr250Enabled: Cho phép phân quyền sử dụng @RoleAllow - annotation theo chuẩn JSR-250 standard của java Về cơ bản chức năng của 3 thằng là như nhau.

3. GlobalMethodSecurityConfiguration

Class chịu trách nhiệm cho việc base configuration cho security của cả ứng dụng, các bạn có thể extends class này để overide lại một vài config.

@Configuration
@EnableGlobalMethodSecurity(
        prePostEnabled = true,
        securedEnabled = true,
        jsr250Enabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
}

4. Role

Trên thực tế, có 2 cách để setup role cho một service.

  • Sử dụng đống annotation đã setup ở trên
  • Tạo một annotation phân quyền, và nhúng nhưng role cho phép vào annotation đấy.Ví dụ:
    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @PreAuthorize("hasRole('ADMIN')")
    public @interface IsAdmin {

    }

5. Demo

6. Full Source

spring-security-role http://123link.vip/BDeDwPeV