[Spring boot + Spring Security] Authentication with Custom Filter

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
  • xây dựng login page, home page.
  • Build 1 CustomFilter, chỉ xử lý các request đến từ địa chỉ 127.0.0.1
  • 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. CustomFilter

Các filter được lọt vào mắt xanh của anh chàng DelegatingFilterProxy sẽ phải là con của ông GenericFilterBean. Mỗi Filter sẽ có một function chính là doFilter. Filter này làm nhiệm vụ thực hiện logic filter của mình dựa trên request đầu vào. Cụ thể ở đây, mình chỉ xử lý các request post tới địa chỉ login có ip là 127.0.0.1

       AntPathRequestMatcher matcher = new AntPathRequestMatcher("/login", "POST");
        if (!matcher.matches(request)) {
            fc.doFilter(req, res);
            return;
        }

        if (request.getRemoteHost().equals("127.0.0.1")) {

3. MyToken

Ở đây m tự tạo ra một custom một object Authentication. Object này sau khi xác thực xong sẽ được securityContextholder lưu trữ. MyToken sẽ có một vài thông tin cơ bản, bao gôm username, password và danh sách các quyền dược thao tác.

    private String userName;
    private String password;
    private ArrayList grantedAuthorities;
    private boolean isAuthenticated = false;

4. CustomAuthenticationProvider

Class được sinh ra chỉ để xử lý xác thực với các object dạng MyToken.

5. SecurityConfig

    @Bean(name = BeanIds.AUTHENTICATION_MANAGER)
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

        @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests()
                .antMatchers("/login").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginPage("/login")
                .permitAll();
        http.addFilterBefore(customFilter, UsernamePasswordAuthenticationFilter.class);
    }

Custom Filter sẽ được thực hiện trước UsernamePasswordAuthenticationFilter.

5. Demo



6. Full Source

spring-security-custom-authentication-filter
http://bit.ly/2DdhzpS

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

xoandaica

14 bài viết.
6 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
3 0
Bài viết này sẽ hướng dẫn các bạn từng bước xây dựng một ứng dụng java sử dụng spring boot kết hợp với spring data jdbc để lưu trữ và nhận dữ liệu ...
xoandaica viết 6 tháng trước
3 0
White
2 0
1. Single Thread 1. Làm một việc tại một thời điểm Không giống như đa số các ngôn ngữ lập trình khác, javascript đơn giản là đơn luồng. Điều này ...
xoandaica viết 7 tháng trước
2 0
White
2 0
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 ...
xoandaica viết 7 tháng trước
2 0
Bài viết liên quan
White
2 0
I used Spring boot, Hibernate few times back then at University, I'v started using it again recently. In this (Link), I want to check how Spring J...
Rey viết 7 tháng trước
2 0
White
0 0
Giới thiệu Trong bài hôm nay chúng ta sẽ tìm hiểu cách handle request POST của Spring Boot. Trước đó, bạn nên biết 1. 「Spring Boot 8」Tạo Web He...
https://loda.me viết 3 tháng trước
0 0
White
0 0
Giới thiệu Yêu cầu bạn phải đọc bài viết về @Conditional trước: 1. Spring Boot] Hướng dẫn tạo Bean có điều kiện với @Conditional]lin...
https://loda.me viết 3 tháng trước
0 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
14 bài viết.
6 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!