Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ru.gurzhiy.springsecurityjwt.filters;
- import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
- import org.springframework.security.core.context.SecurityContextHolder;
- import org.springframework.security.core.userdetails.UserDetails;
- import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
- import org.springframework.stereotype.Component;
- import org.springframework.web.filter.OncePerRequestFilter;
- import ru.gurzhiy.springsecurityjwt.service.MyUserDetailsService;
- import ru.gurzhiy.springsecurityjwt.utl.JwtUtil;
- import javax.servlet.FilterChain;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- /***
- * intercept every request just once and then examine the header
- */
- @Component
- public class JwtRequestFilter extends OncePerRequestFilter {
- private final MyUserDetailsService myUserDetailsService;
- private final JwtUtil jwtUtil;
- public JwtRequestFilter(MyUserDetailsService myUserDetailsService, JwtUtil jwtUtil) {
- this.myUserDetailsService = myUserDetailsService;
- this.jwtUtil = jwtUtil;
- }
- @Override
- protected void doFilterInternal(HttpServletRequest request,
- HttpServletResponse response,
- FilterChain filterChain) throws ServletException, IOException {
- String authorizationHeader = request.getHeader("Authorization");
- String username = null;
- String jwt = null;
- if (authorizationHeader != null && authorizationHeader.startsWith("Bearer")){
- jwt = authorizationHeader.substring(7);
- username = jwtUtil.extractUsername(jwt);
- }
- if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
- UserDetails userDetails = this.myUserDetailsService.loadUserByUsername(username);
- if (jwtUtil.validateToken(jwt, userDetails)){
- UsernamePasswordAuthenticationToken namePassAuthToken = new UsernamePasswordAuthenticationToken(
- userDetails, null, userDetails.getAuthorities());
- namePassAuthToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
- SecurityContextHolder.getContext().setAuthentication(namePassAuthToken);
- }
- filterChain.doFilter(request, response);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement