Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 3c21dde

Browse files
committed
JwtFilter
1 parent 1439696 commit 3c21dde

File tree

6 files changed

+184
-6
lines changed

6 files changed

+184
-6
lines changed

‎day-13/day-13.drawio

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<mxfile host="Electron" modified="2022年08月03日T19:22:23.016Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/14.5.1 Chrome/89.0.4389.82 Electron/12.0.1 Safari/537.36" etag="2IYyRyY_4wOmRozmlcDt" version="14.5.1" type="device" pages="3"><diagram id="YrFrgJT-O8_4PVSDo9U2" name="SpringSecurityBasicAuth">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</diagram><diagram id="8LnyWxudWZvHDe-soqNP" name="architecutre">7Ztde6I4FIB/jZfuA4kgXFpru+u0O91xOp252idC1MwgcWL8oL9+EwkqJP0UkfqsvSg5hIDvyTk55xAbsDtdXzM0m9zSEEcNYIXrBrxsAGBbniv+SUmiJH7bSSVjRkIl2wkG5BFnlyrpgoR4nuvIKY04meWFAY1jHPCcDDFGV/luIxrl7zpDY6wJBgGKdOkDCfkklXqgvZP/icl4kt3Zdv30zBRlndU3mU9QSFd7IthrwC6jlKdH03UXR5JexiW97uqJs9sHYzjmr7kAwq+Pq3vErsE33724uu73k7umGmWJooX6wupheZIRYHQRh1gOYjfgxWpCOB7MUCDProTShWzCp5E6jVigdAhFS3/E7H6YcbzeE6lHvsZ0ijlLRBd1tqXoqfnT3ApWO220fCWb7GnCc5UQqRkw3o69gyQOFKc3MAMlMxvRmHdpRNnmWph+JMuIjGMhCwQ9zGRHEkV7HUeO/BPyOWf0F947424+5SjAzSvAsQ38HQN/2zoWf6jhxqGwWdWkjE/omMYo6u2kFzuFWKK163ND6Uyp4SfmPFGTFy04zStJAGTJd3n9H07byQQ/NgLLBpngcq1ukbaS/dYdZkQQkKpMhWvC0xFd21XtdEDf91R7N55sJHuN4mhPqnpOFyzAz/BsKbeK2BjzZ/opVy5hPztxGI4QJ8u8AzXNgs2lHcZQstdhRknM59ok2Y7//nnTKttu8+YYIuyNAqM5Bh4ejsoxR9t38g7R9nWDtE0O0baPZZDOKQzy/fPdfeV8b1U839XId1KwUzho5x0w8ArL/Nv6i4P0CUo1Lfe4pjUajUBgNK3QHbpOSSudbeVNa7v07VkWdCtd6toa1wFmSxLgebmuy8Fe2DLx9cAQbiIJGaRkFm0IPd8MG1hFPwYMfqxtoA2PBdvTYHdpLIgsAi5wyMdzI/EMF0PRcMfy6BLPsIAeyO/1V/xT5B+ExppmBBGex5/HHNMYF3SiRFkEGOGRHEHSJSI16SjxlIThxpmatJ13sIUY8+pKxZilaLIQotsGuzFqEhxLk75Jk4J5FGGmW87h+tlG6AdqqFwDK6rFO7VasgBk353NGInHQvaAh4e5tJeyJWwLL9c2+TjfbUNU0hriFbIlqDM3rSBHy1VtPcHfIr+QpQdgXeLl+fC3Xa9mCtCrBTd0OqS/zoE2cJya0YYa7f5d5xxQwxasGWo9nb5NBv/cnAPsFqybGz9Jil0IGq3N56DU235t7l16rekw/Hp+++XydqAnBGYLmE/QTB4GSUSERhh82Q6Gqe5uhlsBCn6NNxr9vOBiGJyFqqnybOcZfWlGVcZCW6hDtSxDdOkZbMQ7mo3oyXK/8013/nUM91Vb6bJtSti8F2zv3RX9JjBk3q0q8wKg5wWHrSInqcxqCZdh0ai4MAsM0f9T9aM6mkUJSrGLkx3qSqk0CQZ6iCq+HuGk5JpeRfnWE9Xmfb4mvMd7Oasv1VO5K+EjwgVO3eDqS2wogsaPRxbCupHVi89f8IzOCaesbM9wimp/wQ2blsZKa/3AWCL+v9j/akVWsX4O8ervweMAThef+vB6cPvvp3tY/u6bOrzFt01YjxYrGrnqYcmzDuhMw8XCW8lXv5Q82nTXq2z9GdpqJjm3hcF2KlwZjMCdkv1L6TsiXZBHVvGWSCM0Q32s1+l+/RBeo9rai7af1eBhKnUwekiP1oQeGHHWo4zvFvKnKsv4RtZ6kM8wCuRLWEFXggJWSKfngL59wjcoQ9Lj8eD+Afz+bXUS2Pv+Y/nZsNGd4XCxPgfWnl0z1nqIvpnmzfMh7teMuB68b1g3+WQRn8VOA79dM+J6XJ4SD/FS/j5p3hSRDo7nphLBB8TvFfY1tUxb/Ey/AnkHf9Hc/Sgq3aC8+20Z7P0H</diagram><diagram id="kfv-dzmXolVLT_gyiLCh" name="AddBook">1ZbfT4MwEMf/Gh5NoHUwHydzM+rM3BaNT6aDkzYpdJYy2P56ixQZYYnOZJl74vrt/ch97ghY2I+LsSQrOhEhcAvZYWHhoYWQY/dd/SiVTaX0bSNEkoXGqRHmbAt1pFEzFkLaclRCcMVWbTEQSQKBamlESpG33d4Fb1ddkQg6wjwgvKu+sFBR0wXyGv0WWETryo57Vd3EpHY2naSUhCLfkfCNhX0phKqsuPCBl/BqLn6KHu/evG3vcvD84C2nbvA8uqiSjQ4J+W5BQqL+nJrcD/3BMFm89j7SySwOvMVTYELsNeGZ4eUTBZGQTM8MuVyXu15KbUWlNSMhE9eZUiIxSNSm5ixFloRQ1rK1Z06ZgvmKBOVtrjdLa1TFXJ8cbf6yIdP4GqSCYmecpsExiBiU3GiXol7OKsLsqlOPLm8m77hGo7tT94xIzLZF36kbotowUA8A7HQADzJFhdxDdw68fAHOASx2Tg4WdcAumNLM/iU+5P28mAjv4dc/Fj7cwTeVLDgTfOjk+C67+LIlZykFeR4I8RER6mPzVfy62/m3wDef</diagram></mxfile>
1+
<mxfile host="Electron" modified="2022年08月04日T13:14:26.851Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.9.9 Chrome/85.0.4183.121 Electron/10.1.5 Safari/537.36" etag="LpTlW6QWsRihUL-E6U-X" version="13.9.9" type="device" pages="4"><diagram id="YrFrgJT-O8_4PVSDo9U2" name="SpringSecurityBasicAuth">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</diagram><diagram id="8LnyWxudWZvHDe-soqNP" name="architecutre">7Ztde6I4FIB/jZfuA4kgXFpru+u0O91xOp252idC1MwgcWL8oL9+EwkqJP0UkfqsvSg5hIDvyTk55xAbsDtdXzM0m9zSEEcNYIXrBrxsAGBbniv+SUmiJH7bSSVjRkIl2wkG5BFnlyrpgoR4nuvIKY04meWFAY1jHPCcDDFGV/luIxrl7zpDY6wJBgGKdOkDCfkklXqgvZP/icl4kt3Zdv30zBRlndU3mU9QSFd7IthrwC6jlKdH03UXR5JexiW97uqJs9sHYzjmr7kAwq+Pq3vErsE33724uu73k7umGmWJooX6wupheZIRYHQRh1gOYjfgxWpCOB7MUCDProTShWzCp5E6jVigdAhFS3/E7H6YcbzeE6lHvsZ0ijlLRBd1tqXoqfnT3ApWO220fCWb7GnCc5UQqRkw3o69gyQOFKc3MAMlMxvRmHdpRNnmWph+JMuIjGMhCwQ9zGRHEkV7HUeO/BPyOWf0F947424+5SjAzSvAsQ38HQN/2zoWf6jhxqGwWdWkjE/omMYo6u2kFzuFWKK163ND6Uyp4SfmPFGTFy04zStJAGTJd3n9H07byQQ/NgLLBpngcq1ukbaS/dYdZkQQkKpMhWvC0xFd21XtdEDf91R7N55sJHuN4mhPqnpOFyzAz/BsKbeK2BjzZ/opVy5hPztxGI4QJ8u8AzXNgs2lHcZQstdhRknM59ok2Y7//nnTKttu8+YYIuyNAqM5Bh4ejsoxR9t38g7R9nWDtE0O0baPZZDOKQzy/fPdfeV8b1U839XId1KwUzho5x0w8ArL/Nv6i4P0CUo1Lfe4pjUajUBgNK3QHbpOSSudbeVNa7v07VkWdCtd6toa1wFmSxLgebmuy8Fe2DLx9cAQbiIJGaRkFm0IPd8MG1hFPwYMfqxtoA2PBdvTYHdpLIgsAi5wyMdzI/EMF0PRcMfy6BLPsIAeyO/1V/xT5B+ExppmBBGex5/HHNMYF3SiRFkEGOGRHEHSJSI16SjxlIThxpmatJ13sIUY8+pKxZilaLIQotsGuzFqEhxLk75Jk4J5FGGmW87h+tlG6AdqqFwDK6rFO7VasgBk353NGInHQvaAh4e5tJeyJWwLL9c2+TjfbUNU0hriFbIlqDM3rSBHy1VtPcHfIr+QpQdgXeLl+fC3Xa9mCtCrBTd0OqS/zoE2cJya0YYa7f5d5xxQwxasGWo9nb5NBv/cnAPsFqybGz9Jil0IGq3N56DU235t7l16rekw/Hp+++XydqAnBGYLmE/QTB4GSUSERhh82Q6Gqe5uhlsBCn6NNxr9vOBiGJyFqqnybOcZfWlGVcZCW6hDtSxDdOkZbMQ7mo3oyXK/8013/nUM91Vb6bJtSti8F2zv3RX9JjBk3q0q8wKg5wWHrSInqcxqCZdh0ai4MAsM0f9T9aM6mkUJSrGLkx3qSqk0CQZ6iCq+HuGk5JpeRfnWE9Xmfb4mvMd7Oasv1VO5K+EjwgVO3eDqS2wogsaPRxbCupHVi89f8IzOCaesbM9wimp/wQ2blsZKa/3AWCL+v9j/akVWsX4O8ervweMAThef+vB6cPvvp3tY/u6bOrzFt01YjxYrGrnqYcmzDuhMw8XCW8lXv5Q82nTXq2z9GdpqJjm3hcF2KlwZjMCdkv1L6TsiXZBHVvGWSCM0Q32s1+l+/RBeo9rai7af1eBhKnUwekiP1oQeGHHWo4zvFvKnKsv4RtZ6kM8wCuRLWEFXggJWSKfngL59wjcoQ9Lj8eD+Afz+bXUS2Pv+Y/nZsNGd4XCxPgfWnl0z1nqIvpnmzfMh7teMuB68b1g3+WQRn8VOA79dM+J6XJ4SD/FS/j5p3hSRDo7nphLBB8TvFfY1tUxb/Ey/AnkHf9Hc/Sgq3aC8+20Z7P0H</diagram><diagram id="kfv-dzmXolVLT_gyiLCh" name="AddBook">1ZbbboMwDIafhstJJWmhu+zoYdpJ3Vpt2tWUgkciBcJCKHRPvzBCAVFpB6naeoXz27Hlz0ZgYS8qFpIk9FYEwC00CAoLTy2E7OH5QD9KZVcpztCuhFCywAQ1woq9gxHNvTBjAaSdQCUEVyzpir6IY/BVRyNSirwb9ip4t2pCQugJK5/wvvrEAkUrdYzcRr8EFtK6su2cV56I1MGmk5SSQOQtCc8s7EkhVGVFhQe8hFdz8VJ0d/Xivo+Gk8cbd7N0/Mf5WZVs/pMr+xYkxOrXqcn11JtM4/Xz6C29fYh8d33vmyuDLeGZ4eURBaGQTM8MOVyXu9hIbYWl9UACJi4ypURskKhdzVmKLA6grDXQkTllClYJ8UtvrjdLa1RFXJ9sbX6zIdP4FqSCojVO0+ACRARK7nSI8Y5NP2ZX7Xp0eTN52zEabU/dNSIx2xbuUzdEtWGg/gCw3QM8yRQV8gDdFfDyBTgFsNj+c7CoB3bNlGb2L/Eh9+vFRPgAv/Gx8OEevqVk/ongQ3+Ob9jHl204SynI00CIj4hQH5uv4qev9W+BZx8=</diagram><diagram id="W-5UPttzntP2v7lAjAoX" name="Sayfa -4">1VZdj5swEPw1PLYiOIHksUeSO1WtVCmp2t6bizfg1rDUmAD99TXBhPg4XZvqoss9wY7XXzOzKzskTOtbSfPkIzIQjuey2iFLx/MmLpnrT4s0HeK7QQfEkjOTNAAb/hv6mQYtOYPCSlSIQvHcBiPMMoiUhVEpsbLTdijsXXMawwjYRFSM0S+cqaRD514w4HfA46TfeeIvupGU9snmJkVCGVYnEFk5JJSIqvtL6xBES17PS/lrvQpn6eLzFnbL+r64/17t33SLrc+ZcryChEw979K+uZpqer6AafpMiFIlGGNGxWpAbySWGYN2VVdHQ84HxFyDEw3+AKUa4wVaKtRQolJhRvUtZPPVzD8E39rg7awPl/Xp4LIxUXfW9oAPpP0LLyavwFJG8ESeZ+xJZQxPrUeO4uuqAUxBH1LPkyCo4nv7cNTYNz7mDRLpH6PSGYqZQ+6pKM1OIwkHgVq2q4Qr2OT0cPVKF7kthlkOpIL6P2gd03DsHKZsTN8gfUOohiqc9KWVnFSg716IueAlvH5pz5J/9Oz0JT1LXolnvcX0yjw7HTH3vlJrLhTI66RwGlxb2c9eifl8/9qYm4+Yu9tuP43Y0zwom6JCSfwJIQqUGskwa1vpjgvxAKKCx5kOI82bNjS5aVnl+u32zgyknLFDH35ME7s3X0oWYqviBWNV5o+I4p0vig6Hx+Rh7ORJTlZ/AA==</diagram></mxfile>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.bookstore.api.jwt;
2+
3+
import java.io.IOException;
4+
5+
import javax.servlet.ServletException;
6+
import javax.servlet.http.HttpServletRequest;
7+
import javax.servlet.http.HttpServletResponse;
8+
9+
import org.springframework.security.core.AuthenticationException;
10+
import org.springframework.security.web.AuthenticationEntryPoint;
11+
import org.springframework.stereotype.Component;
12+
13+
@Component
14+
public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint {
15+
16+
@Override
17+
public void commence(HttpServletRequest request, HttpServletResponse response,
18+
AuthenticationException authException) throws IOException, ServletException {
19+
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, authException.getMessage());
20+
}
21+
22+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package com.bookstore.api.jwt;
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 org.springframework.beans.factory.annotation.Autowired;
11+
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
12+
import org.springframework.security.core.context.SecurityContextHolder;
13+
import org.springframework.security.core.userdetails.UserDetails;
14+
import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
15+
import org.springframework.util.StringUtils;
16+
import org.springframework.web.filter.OncePerRequestFilter;
17+
18+
import com.bookstore.api.services.ApplicationUserService;
19+
20+
public class JwtAuthenticationFilter extends OncePerRequestFilter {
21+
22+
@Autowired
23+
private JwtTokenProvider jwtTokenProvider;
24+
25+
@Autowired
26+
private ApplicationUserService userDetailsService;
27+
28+
@Override
29+
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
30+
throws ServletException, IOException {
31+
try {
32+
// Authorization Header var mı? ve Bearer ile başlıyor mu?
33+
String jwtToken = extractJwtFromRequest(request);
34+
35+
// Geçerli bir token mı?
36+
if (StringUtils.hasText(jwtToken) &&
37+
jwtTokenProvider.validateToken(jwtToken)) {
38+
39+
// Username token'dan al.
40+
String username = jwtTokenProvider.getUserNameFromJwt(jwtToken);
41+
42+
// UserDetail oluştur
43+
UserDetails user = userDetailsService.loadUserByUsername(username);
44+
if (user != null) {
45+
UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(user, null,
46+
user.getAuthorities());
47+
48+
auth.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
49+
SecurityContextHolder.getContext().setAuthentication(auth);
50+
}
51+
}
52+
} catch (Exception e) {
53+
return;
54+
}
55+
filterChain.doFilter(request, response);
56+
}
57+
58+
// Authorization : "Bearer saşldkşaskdşsa.lkşsakşdskaşlsda.sdlakdşaşak"
59+
private String extractJwtFromRequest(HttpServletRequest request) {
60+
String bearer = request.getHeader("Authorization");
61+
if (StringUtils.hasText(bearer) && bearer.startsWith("Bearer "))
62+
return bearer.substring("Bearer".length() + 1);
63+
return null;
64+
}
65+
66+
}

‎day-14/api/src/main/java/com/bookstore/api/jwt/JwtConfig.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@
1111
@ConfigurationProperties(prefix = "application.jwt")
1212
@Data
1313
public class JwtConfig {
14+
1415
private String secretKey;
1516
private String tokenPrefix;
1617

17-
@Value("${application.jwt.expire.in}")
18-
private Long expireIn;
18+
@Value("${application.jwt.expires.in}")
19+
private Long expiresIn;
1920

2021
public String getAuthorizationHeader() {
2122
return HttpHeaders.AUTHORIZATION;
2223
}
23-
}
24+
}

‎day-14/api/src/main/java/com/bookstore/api/jwt/JwtSecretKey.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@
99

1010
@Configuration
1111
public class JwtSecretKey {
12+
1213
private final JwtConfig jwtConfig;
1314

1415
public JwtSecretKey(JwtConfig jwtConfig) {
1516
this.jwtConfig = jwtConfig;
1617
}
1718

1819
@Bean
19-
public SecretKey secretKey(){
20+
public SecretKey secretKey(){
2021
return Keys.hmacShaKeyFor(jwtConfig.getSecretKey().getBytes());
2122
}
22-
}
23+
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package com.bookstore.api.jwt;
2+
3+
import java.util.Date;
4+
5+
import org.springframework.security.core.Authentication;
6+
import org.springframework.stereotype.Component;
7+
8+
import com.bookstore.api.security.ApplicationUser;
9+
10+
import io.jsonwebtoken.Claims;
11+
import io.jsonwebtoken.ExpiredJwtException;
12+
import io.jsonwebtoken.Jwts;
13+
import io.jsonwebtoken.MalformedJwtException;
14+
import io.jsonwebtoken.UnsupportedJwtException;
15+
16+
@Component
17+
public class JwtTokenProvider {
18+
private final JwtConfig jwtConfig;
19+
private final JwtSecretKey secretKey;
20+
21+
public JwtTokenProvider(JwtConfig jwtConfig, JwtSecretKey secretKey) {
22+
this.jwtConfig = jwtConfig;
23+
this.secretKey = secretKey;
24+
}
25+
26+
public String generateJwtToken(Authentication auth) {
27+
ApplicationUser userDetails = (ApplicationUser) auth.getPrincipal();
28+
return Jwts.builder()
29+
.setSubject(userDetails.getUsername())
30+
.claim("authorities", userDetails.getAuthorities())
31+
.setIssuedAt(new Date())
32+
.setExpiration(new Date(new Date().getTime() + jwtConfig.getExpiresIn()))
33+
.signWith(secretKey.secretKey()) // ?
34+
.compact();
35+
}
36+
37+
public String generateTokenByUserName(String username) {
38+
Date expireDate = new Date(new Date().getTime() + jwtConfig.getExpiresIn());
39+
return Jwts.builder()
40+
.setSubject(username)
41+
.setIssuedAt(new Date())
42+
.setExpiration(expireDate)
43+
.signWith(secretKey.secretKey())
44+
.compact();
45+
}
46+
47+
public String generateTokenByUserId(int id) {
48+
Date expireDate = new Date(new Date().getTime() + jwtConfig.getExpiresIn());
49+
return Jwts.builder()
50+
.setSubject(Integer.toString(id))
51+
.setExpiration(expireDate)
52+
.signWith(secretKey.secretKey())
53+
.compact();
54+
}
55+
56+
String getUserNameFromJwt(String token) {
57+
Claims claims = getJwtBody(token);
58+
return claims.getSubject();
59+
}
60+
61+
boolean validateToken(String token) {
62+
try {
63+
getJwtBody(token);
64+
return isTokenExpired(token);
65+
} catch (MalformedJwtException e) {
66+
return false;
67+
} catch (ExpiredJwtException e) {
68+
return false;
69+
} catch (UnsupportedJwtException e) {
70+
return false;
71+
} catch (IllegalArgumentException e) {
72+
return false;
73+
}
74+
}
75+
76+
private boolean isTokenExpired(String token) {
77+
Date expiration = getJwtBody(token).getExpiration();
78+
return expiration.before(new Date());
79+
}
80+
81+
private Claims getJwtBody(String token) {
82+
return Jwts.parser()
83+
.setSigningKey(secretKey.secretKey())
84+
.parseClaimsJws(token)
85+
.getBody();
86+
}
87+
88+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /