๐ Spring/Spring Security
์ด ํฌ์คํธ๋ ๋ฐ์ด ํ๋ก๊ทธ๋๋ฐ๋์ ์ ํ๋ธ ๊ฐ์๋ฅผ ๋ฃ๊ณ ๋์ ์ ๋ฆฌํ ๊ธ์
๋๋ค. Adapter ํจํด์ ์ด์ฉํ์ฌ UserDetails ๊ตฌํ User ํด๋์ค๋ UserDetails๋ฅผ ๊ตฌํํ ํด๋์ค์
๋๋ค. ์ฐ๋ฆฌ๋ Adapter ํจํด์ ์ด์ฉํ์ฌ User ํด๋์ค๋ฅผ ์์๋ฐ์ ๊ฒ์
๋๋ค. public class AccountAdapter extends User { private Account account; public AccountAdapter(Account account) { super(account.getUsername(), account.getPassword(), getAuthorities(account.getRoles())); this.account = account; } public static Collection
๐ Spring/Spring Security
์ด ํฌ์คํธ๋ ๋ฐ์ด ํ๋ก๊ทธ๋๋ฐ๋์ ์ ํ๋ธ ๊ฐ์๋ฅผ ๋ฃ๊ณ ๋์ ์ ๋ฆฌํ ๊ธ์
๋๋ค. ํ ํฐ์ ๊ฒ์ฆ ํ ํํฐ ์์ฑ ํํฐ๋ฅผ ์ด์ฉํ์ฌ ํ ํฐ ๊ฒ์ฆ์ ํ์ ๋, ์ ํจํ์ง ์๋ค๋ฉด ํด๋น ์ปจํธ๋กค๋ฌ๋ก ๋ ์ด์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ํ ์ ์์ต๋๋ค. public class MyFilter3 implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) servletRequest; HttpServletR..
๐ Spring/Spring Security
์ด ํฌ์คํธ๋ ๋ฐ์ด ํ๋ก๊ทธ๋๋ฐ๋์ ์ ํ๋ธ ๊ฐ์๋ฅผ ๋ฃ๊ณ ๋์ ์ ๋ฆฌํ ๊ธ์
๋๋ค. Spring Security Filter ๊ตฌ์กฐ ํํฐ๋ฅผ ๋ฑ๋กํ๊ธฐ ์ SpringFilterChain ๊ตฌ์กฐ์ ๋ํด์ ๋จผ์ ์๋ฉด ์ข์ต๋๋ค. Filter๋ฅผ ์์ฑํด๋ณด์ public class MyFilter1 implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("Filter 1"); filterChain.doFilter(servletReque..
๐ Spring/Spring Security
์ด ํฌ์คํธ๋ ๋ฐ์ด ํ๋ก๊ทธ๋๋ฐ๋์ ์ ํ๋ธ ๊ฐ์๋ฅผ ๋ฃ๊ณ ๋์ ์ ๋ฆฌํ ๊ธ์
๋๋ค. Token ์ธ์ฆ ๋ฐฉ์ ์ธ์
์ ์ฌ์ฉํ์ ๋์ ์๋ฒ์ ๋๋ ์ธ์
์ ์ฅ์, ๋ ์ฌ๋ฌ ์๋ฒ์ผ ๋์ ์ฒ๋ฆฌํด์ผ ํ ๋ฌธ์ ๋ค์ ํ๋ฐฉ์ ํด๊ฒฐํ ์ ์์ต๋๋ค. ์ฟ ํค๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋๋ฏ๋ก ์ฟ ํค๋ฅผ ํ์ทจ ๋นํ์ ๋์ ๋ณด์ ์ทจ์ฝ์ ๋ค๋ ์ฌ๋ผ์ง๊ฒ ๋ฉ๋๋ค. ์๋ฒ๊ฐ ์ฌ๋ฌ ๋ ์ด์ด๋ Secret_key ๊ฐ๋ง ์๊ณ ์์ผ๋ฉด ํ ํฐ์ Valid ํ ์ ์์ต๋๋ค. Session์ ๋์ผ ๋๋ฉ์ธ์์๋ง.. ๋ง์ผ ๋์ผ ๋๋ฉ์ธ์์์ ์์ฒญ์ด ์๋๋ผ๋ฉด, ์ฟ ํค๊ฐ ์ ๋ ๋ผ๊ฐ๋ค! (์๋ฒ์์ ์ฟ ํค๋ฅผ ๊ฑฐ๋ถ!) ๊ทธ๋ ๋ค๋ฉด, javascript์์ Ajax๋ก ํค๋์ ์ฟ ํค๋ฅผ ๊ฐ์ ๋ก ๋ด์์ ๋ณด๋ผ ์๊ฐ ์๋๋ฐ, ์๋ฒ์์๋ HTTP Only ์ค์ ์ ํตํด ์ธ๋ถ์์ HTTP ์์ฒญ์ด ์๋ javascript..
๐ Spring/Spring Security
์ด ํฌ์คํธ๋ ๋ฐ์ด ํ๋ก๊ทธ๋๋ฐ๋์ ์ ํ๋ธ ๊ฐ์๋ฅผ ๋ฃ๊ณ ๋์ ์ ๋ฆฌํ ๊ธ์
๋๋ค. dependency ์ถ๊ฐ Maven com.auth0 java-jwt 3.16.0 Gradle // https://mvnrepository.com/artifact/com.auth0/java-jwt implementation group: 'com.auth0', name: 'java-jwt', version: '3.16.0' application.yml ์ค์ spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: "jdbc:mysql://localhost:3306/JwtTutorial" username: "root" password: "1234" jpa: hibern..
๐ Spring/Spring Security
์ด ํฌ์คํธ๋ ๋ฐ์ด ํ๋ก๊ทธ๋๋ฐ๋์ ์ ํ๋ธ ๊ฐ์๋ฅผ ๋ฃ๊ณ ๋์ ์ ๋ฆฌํ ๊ธ์
๋๋ค. JWT๋? jwt.io์ ๊ฐ๋ณด๋ฉด JWT๋ฅผ ์ด๋ ๊ฒ ์ค๋ช
ํฉ๋๋ค. JWT๋ก ์ฃผ๊ณ ๋ฐ๋ ์ ๋ณด๋ ๋์งํธ ์๋ช
์ด ๋์ด์์ผ๋ฏ๋ก ํ์ธํ๊ณ ์ ๋ขฐํ ์ ์๋ค. JWT๋ HMAC SHA256 (HS256) ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค. JWT๋ ์ ๋ณด๋ฅผ ์ํธํํ์ฌ ์ฃผ๊ณ ๋ฐ์ ์ ์์ง๋ง, ์๋ช
๋ ํ ํฐ์ ์ค์ ์ ๋ ๊ฒ. ("์ด๊ฑด ๋ด๊ฐ ๋ณด๋ธ๊ฒ ๋ง์!" ๋ผ๋ ์๋ช
, ์ธ์ฆ์ ์ค์ ์ ๋์๋ค.) JWT ๊ตฌ์กฐ (.)์ ๊ธฐ์ค์ผ๋ก ์ธ๊ฐ์ง ๋ถ๋ถ์ผ๋ก ๋๋๋ค. Header Payload Signature ์์ฑ๋ ํ ํฐ์ ์ด๋ ๋ค. xxxxx.yyyyy.zzzzz Header { "alg": "HS256", "typ": "JWT" } ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ํธํ๋ฅผ ํ๋์ง ํ ํฐ์ ํ์
์ด ๋ฌด์์ธ์ง ..