What is Spring Security? The short answer.
- just a bunch of servlet filters
- plugs into frameworks like Spring Web MVC, Boot or WebFlux
- integrates well with standards like OAuth2 or SAML
- protects against common exploits like CSRF
- auto-generates login/logout pages
Credit: @MarcoBehler https://bit.ly/2ZiaCDe
Servlet Filters: the cornerstone of Spring Security
- been around for about 20 years (since Java Servlet Spec 2.3)
Credit (image inspiration): CodeJava.net
Filter Chain: request's ordeal
- Order matters! Top to bottom ..
chain.doFilter(req, res)
Authentication vs Authorization
- Who are you?
- What are you allowed to do?
Who?
What?
Filter Chain for Reactive Web
- 12 filters in total! (Spring Security 5.5.1)
org.springframework.security.web.server.*
Get to Know (Some) of Your Filters!
- Custom login / logout page, enabled by default.
LoginPageGeneratingWebFilter, LogoutWebFilter
AuthenticationWebFilter, SecurityContextServerWebExchangeWebFilter
- User authentication: from the initial client request to a fully resolved authentication object.
- Is the user entitled to view the protected data or perform an action?
AuthorizationWebFilter
Spring Security ≈ Filters Config
@Bean
fun springSecurityFilterChain(http: ServerHttpSecurity): SecurityWebFilterChain =
http
.authorizeExchange()
.anyExchange().authenticated()
.and().formLogin()
.and().build()
new CsrfSpec()
new FormLoginSpec()
new LoginPageSpec()
new CsrfWebFilter()
CSRF protection enabled
Redirect to "/" after a successful login
Render the default login page
Why WebFlux?
- Fully non-blocking IO: handles bigger load with fewer threads
- Adds a concise API for routing and request handling, e.g. not just @Controller
- Support Reactive Streams back pressure mechanism
Credit (image): spring.io
Let's Get Started!
In my YouTube tutorial you will learn how to
- configure and successfully secure modern reactive web apps
- easily enable SSO with social login on Google, Facebook or GitHub
- load user details from your own database in a non-blocking manner
- shield against some of the common attacks
.. and more
- prevent unauthorized access