1
+ package com .javayh .security .token .config ;
2
+
3
+ import java .io .IOException ;
4
+
5
+ import javax .servlet .FilterChain ;
6
+ import javax .servlet .ServletException ;
7
+ import javax .servlet .http .HttpServletRequest ;
8
+ import javax .servlet .http .HttpServletResponse ;
9
+
10
+ import com .javayh .security .token .service .UserDetailsServiceImpl ;
11
+ import org .slf4j .Logger ;
12
+ import org .slf4j .LoggerFactory ;
13
+ import org .springframework .beans .factory .annotation .Autowired ;
14
+ import org .springframework .security .authentication .UsernamePasswordAuthenticationToken ;
15
+ import org .springframework .security .core .context .SecurityContextHolder ;
16
+ import org .springframework .security .core .userdetails .UserDetails ;
17
+ import org .springframework .security .web .authentication .WebAuthenticationDetailsSource ;
18
+ import org .springframework .util .StringUtils ;
19
+ import org .springframework .web .filter .OncePerRequestFilter ;
20
+
21
+
22
+ public class AuthTokenFilter extends OncePerRequestFilter {
23
+ @ Autowired
24
+ private JwtUtils jwtUtils ;
25
+
26
+ @ Autowired
27
+ private UserDetailsServiceImpl userDetailsService ;
28
+
29
+ private static final Logger logger = LoggerFactory .getLogger (AuthTokenFilter .class );
30
+
31
+ @ Override
32
+ protected void doFilterInternal (HttpServletRequest request , HttpServletResponse response , FilterChain filterChain )
33
+ throws ServletException , IOException {
34
+ try {
35
+ String jwt = parseJwt (request );
36
+ if (jwt != null && jwtUtils .validateJwtToken (jwt )) {
37
+ String username = jwtUtils .getUserNameFromJwtToken (jwt );
38
+
39
+ UserDetails userDetails = userDetailsService .loadUserByUsername (username );
40
+ UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken (
41
+ userDetails , null , userDetails .getAuthorities ());
42
+ authentication .setDetails (new WebAuthenticationDetailsSource ().buildDetails (request ));
43
+
44
+ SecurityContextHolder .getContext ().setAuthentication (authentication );
45
+ }
46
+ } catch (Exception e ) {
47
+ logger .error ("Cannot set user authentication: {}" , e );
48
+ }
49
+
50
+ filterChain .doFilter (request , response );
51
+ }
52
+
53
+ private String parseJwt (HttpServletRequest request ) {
54
+ String headerAuth = request .getHeader ("Authorization" );
55
+
56
+ if (StringUtils .hasText (headerAuth ) && headerAuth .startsWith ("Bearer " )) {
57
+ return headerAuth .substring (7 , headerAuth .length ());
58
+ }
59
+
60
+ return null ;
61
+ }
62
+ }
0 commit comments