2021. 12. 2. 17:50ใSpring
1. Spring Security ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
Spring ๋ฒ์ : 5.2.13
java : 1.8
1๏ธโฃ Spring Security Web
https://mvnrepository.com/artifact/org.springframework.security/spring-security-web
2๏ธโฃ Spring Security Core
https://mvnrepository.com/artifact/org.springframework.security/spring-security-core
3๏ธโฃ Spring Security Config
https://mvnrepository.com/artifact/org.springframework.security/spring-security-config
4๏ธโฃ Spring Security Taglibs
https://mvnrepository.com/artifact/org.springframework.security/spring-security-taglibs
2. security-context.xml ์ค์ ํ์ผ ์์ฑํ๊ธฐ
๊ธฐ๋ณธ์ธ servlet-context.xml ๋ง๊ณ ์๋ก security-context.xml ํ์ผ์ spring -> appServlet๋ฐ์ ์์ฑํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ namespace์์ security๋ฅผ ์ถ๊ฐํด์ค๋ค.
์๋ ์ ๋ถ๋ถ์ด 5.2.xsd์ธ๊ฐ ์ด๋ ๊ฒ ์์ฑ๋์ด์๋๋ฐ ๋ ธ๋๊ฒ ์น ํ ๋ถ๋ถ์ฒ๋ผ ๋ณ๊ฒฝํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ security-context.xml์ ๋ค์๊ณผ ๊ฐ์ด ๊ธฐ๋ณธ์ ์ธ ํฌ๋งท์ ์์ฑํด์ค๋ค.
3. web.xml ์ค์ ํ๊ธฐ
์๋ก ๋ง๋ security-context.xml ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐ๋ก ์์ฑํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ security ๊ด๋ จ filter๋ฅผ ์ถ๊ฐํด์ค๋ค.
<!-- Security ๊ด๋ จ filter ์ถ๊ฐ --> <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy </filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
์ฌ๊ธฐ๊น์ง๊ฐ ํ๊ฒฝ์ค์ ์ด๋ค..!! ์ฌ๊ธฐ๊น์ง ์ค์ ํ๊ณ ์ ์์ ์ผ๋ก ์๋ฒ๊ฐ ์ ๋์ํ๋์ง ํ์ธํด๋ณธ๋ค.
4. Spring Security Login
์ธ๊ฐ์ง ๊ถํ์ ๋ง๋ค์ด์ all์ ๋ก๊ทธ์ธ ์ฌ๋ถ์ ์๊ด์์ด ์ ์ ๊ฐ๋ฅ, member๋ ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ค์ด ์ ์ ๊ฐ๋ฅ, admin์ ๊ด๋ฆฌ์๋ก ์ด ๊ถํ์ ๊ฐ์ง ์ฌ์ฉ์๋ค๋ง ๋ก๊ทธ์ธํ ์ ์๊ณ , admin์ member ์ ์ ์ํ ์๋ ์๋ค.
1๏ธโฃ SampleController.java
@GetMapping์ @RequestMapping(method=RequestMethod.GET)์ ์ถ์ฝํ์ด๋ค..!
2๏ธโฃ sample/all.jsp, member.jsp, admin.jsp
3๏ธโฃ Spring Security์์์ ์ธ์ฆ Authentication
AuthenticationManager : ์ธ์ฆ ๋ด๋น
AuthenticationProvider : ์ธ์ฆ์ ๋ํ ์ฒ๋ฆฌ
- member
์๋ฒ๋ฅผ ์คํํ๊ณ /sample/all์ ์ ์ ๊ฐ๋ฅํ์ง๋ง /sample/member๋ก ์ ์ํ๋ฉด Spring Security๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ณธ์ ์ธ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ด๋ํ๊ฒ ๋๋ค.
์ด๋ {noop}์ ์ฌ์ฉํ๋ ์ด์ ๋ Spring Security5๋ถํฐ๋ ๋ฐ๋์ passwordEncoder๋ฅผ ์ฌ์ฉํด์ผํ๊ธฐ ๋๋ฌธ์ ์์๋ก ํด๋๊ฒ์ด๋ค!
authorities๋ ๋ก๊ทธ์ธ ์ฑ๊ณต์ ๋ถ์ฌ๋๋ ๊ถํ์ด๋ค.
์ง๊ธ์ ์ผ๋จ ๋ก๊ทธ์์ ์ฒ๋ฆฌํ๊ธฐ ์ํด์๋ session์ ์ง์ ์ญ์ ํด์ค์ผํ๋ค. (f12 ๋๋ฌ์ ์ญ์ ํ๊ธฐ)
- admin
admin์์๋ ์ด์ member์ admin ํ์ด์ง์ ๋ชจ๋ ์ ์ํ ์ ์์ง๋ง
member์์ admin ํ์ด์ง์ ์ ์ํ๋ ค๊ณ ํ๋ฉด
๋ค์๊ณผ ๊ฐ์ ์๋ฌํ๋ฉด์ ๋ณด๊ฒ ๋๋ค.
4๏ธโฃ Spring Security์์ ์ ๊ทผ ์ ํ ๋ฉ์์ง ์ฒ๋ฆฌ
์์์ admin ๊ถํ์ด ์๋ member๊ฐ admin ํ์ด์ง ์ ์ํ๋ ค๊ณ ํ๋ฉด ์ ๊ทผ ์ ํ ์๋ฌ ๋ฉ์์ง ์ฒ๋ฆฌ๋ฅผ AccessDeinedHandler๋ฅผ ํตํด ๊ตฌํ ๊ฐ๋ฅํ๋ค.
- error-page
<security:access-denied-handler>์์๋ error-page๋ฅผ ์ง์ ํ๊ฑฐ๋ AccessDeniedHandler ๊ฐ์ฒด๋ฅผ ์ง์ ํด์ ๊ตฌํ ๊ฐ๋ฅํ๋ค. ์ง๊ธ ์์์๋ ์ ๊ทผ ๊ถํ ์๋ฌ ๋ฐ์์ /accessError uri๋ก ํ๋ฉด ์ง์ ํ๋ค.
๊ทธ๋ฌ๋ฉด 403 ์๋ฌ ํ๋ฉด์ด ์๋ ์ฌ์ฉ์๊ฐ ์ง์ ์์ฑํ ์๋ฌ ํ์ด์ง๋ก ๋ณผ ์ ์๋ค.
- AccessDeniedHandler ๊ตฌํ
์ ๊ทผ ์ ํ ์ฒ๋ฆฌ๋ฅผ ๋ค์ํ๊ฒ ๊ตฌํํ๊ธฐ ์ํด์๋ AccessDeniedHandler๋ฅผ ์ง์ ๊ตฌํํ ์ ์๋ค.
์๋ฅผ ๋ค์ด ์ ๊ทผ ์ ํ ๋ฐ์ ์ ์ฟ ํค๋ ์ธ์ ์ ํน์ ํ ์์ ์ ํ๊ฑฐ๋ HttpServletResponse ์ ํน์ ํ ํค๋ ์ ๋ณด๋ฅผ ์ถ๊ฐํ๋ ๋ฑ์ ํ์๋ฅผ ํ ๊ฒฝ์ฐ AccessDeniedHandler๋ฅผ ๊ตฌํํ์ฌ ์ฒ๋ฆฌํ ์ ์๋ค.
5๏ธโฃ Spring Security Login ํ์ด์ง ์ปค์คํ ํ๊ธฐ
์ ํ๊ทธ๋ Security์์ ์ ๊ณตํ๋ ๊ธฐ๋ณธ ๋ก๊ทธ์ธ ํ์ด์ง์ด๋ค.
์ด๊ฑธ ์ด์ customLogin์ผ๋ก ์์ ํด์ฃผ์ด Login ํ์ด์ง๋ฅผ ์ปค์คํ ํ ๊ฒ์ด๋ค.
์ด๋ post๋ก submit ํด์ผํ๋ฉฐ, name์ userid๊ฐ ์๋ username์ด๋ค!!
6๏ธโฃ Spring Security Login ์ฑ๊ณต ํ์ด์ง
๋ก๊ทธ์ธ ์ฑ๊ณต ์ดํ์ ํน์ ๋์์ ์ํํ๊ธฐ ์ํด์ AutenticationScueessHandler๋ฅผ ๊ตฌํํ์๋ค.
์ฌ๊ธฐ์๋ ๋ก๊ทธ์ธ ํ๊ณ ๋์ ํด๋นํ๋ ํ์ด์ง๋ก ์ด๋ํ๋ ๋์์ ๊ตฌํํ์๋ค.
7๏ธโฃ Spring Security Logout
invalidate-session์ ๋ก๊ทธ์์์ ์ธ์ ๋ฌดํจํ ์ค์ ์ด๋ฉฐ, ์ฟ ํค ์ง์ฐ๋ ์ค์ ์ delete-cookies ์ง์ ๊ฐ๋ฅํ๋ค.
๋ก๊ทธ์์ ์ค์ ์์ ์ customLogout์ด ์ฒ๋ฆฌํ๋ฉฐ post๋ฐฉ์์ผ๋ก ์งํํ๋ค.
(post์ธ ์ด์ ๋ ์คํ๋ง ์ํ๋ฆฌํฐ ๊ธฐ๋ณธ ์ค์ ์ด๋ผ์!)
์์์ get๋ฐฉ์๋ ๊ฐ์ด ์ง์ ํ ์ด์ ๋ admin ํ์ด์ง์์ ๋ก๊ทธ์์ ๋ฒํผ์ ๋๋ฅด๋ฉด post๋ฐฉ์์ด ์๋ get ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
5. ์ต์ข ๊ฒฐ๊ณผ
1๏ธโฃ sample/admin ์ ์
๋ก๊ทธ์ธํ์ง ์์๊ธฐ ๋๋ฌธ์ loginํ์ด์ง๋ก ์ด๋
2๏ธโฃ customLogin ํ์ด์ง๋ก ์ด๋
3๏ธโฃ admin์ผ๋ก ๋ก๊ทธ์ธ
4๏ธโฃ ๋ก๊ทธ์์ ๋ฒํผ ๋๋ฅด๋ฉด logout ํ์ด์ง๋ก ์ด๋ (get)
5๏ธโฃ ๋ก๊ทธ์์ (post)
Spring Security๊น์ง ๋ฐฐ์ ์ผ๋ ์ด์ ๋ค์์๋ ๊ณ์ ๋ฐ์ ์์ผ์ค๋ ๊ฒ์ํ์ ๋ํด์ ๋ก๊ทธ์ธ์ ์ ์ฉํด๋ณผ ์์ ์ด๋ค!