● Security
스프링 시큐리티는 스프링 기반의 애플리케이션 보안(인증, 인가, 권한)을 담당하는 스프링 하위 프레임워크.
보안 관련 옵션을 제공해주며 복잡한 로직없이 어노테이션으로 설정할 수 있고 여러 보안 위협을 방어해주며 요청 헤더도 보안처리를 해준다. 그리고 기본적으로 스프링 시큐리티는 세션 기반 인증을 제공한다.
스프링 시큐리티는 필터 기반으로 동작하여 각 필터에서 인증, 인가와 관련된 작업을 처리한다.
● 시큐리티 필터



● 시큐리티 인증 처리 과정

1. 사용자가 폼에 아이디, 패스워드를 입력하면 HTTPServletRequest에 아이디, 비밀번호가 전달된다. 이때 AuthenticationFilter가 넘어온 아이디와 비밀번호의 유효성 검사를 실시한다.
2. 유효성 검사 후 실제 구현체인 UsernamePasswordAuthenticationToken을 만들어 넘겨준다.
3. 인증용 객체인 UsernamePasswordAuthenticationToken을 AuthenticationManager에게 전달한다.
4. UsernamePasswordAuthenticationToken을 AuthenticationProvider에게 전달한다.
5. 사용자 아이디를 UserDetailsService로 보낸다. UserDetailService는 사용자 아이디로 찾은 사용자의 정보를 UserDetails 객체로 만들어 AuthenticationProvider에게 전달한다.
6. DB에 있는 사용자 정보를 가져온다.
7. 입력 정보와 UserDetails의 정보를 비교해 실제 인증 처리를 진행한다.
8. ~10까지 인증이 완료되면 SecurityContextHolder에 Authentication을 저장한다. 인증 성공 여부에 따라 성공 시 AuthenticationSuccessHandler, 실패시 AuthenticationFailureHandler를 실행한다.
< 실습하기 >
13 프로젝트를 복사해서 14_SpringSecurity 프로젝트를 만든다.
(전에 만든 filter와 scheduling은 계속 돌아가면 불편하니까 주석처리 해준다.)
maven repository로 가서 해당 레파지토리의 코드들을 복사하여 pom.xml에 붙여넣기 해준다.
- Spring Security Core


버전은 스프링프레임워크에 맞게 해주기 위해 수정해준다.

- Spring Security Web


web도 버전 수정을 해준다.

- Spring Security Config


config역시 버전을 수정해준다.

- Spring Security Taglibs


taglib도 버전 수정해준다.

다 했으면 maven -> update project 해준다.
src/main/java의 config에 SecurityConfig 클래스를 만들어 준다.


@EnableWebSecurity로 Security를 활성화 시켜준다.

extends로 WebSecurityConfigurerAdapter를 상속받아주고
마우스 우클릭 -> source -> override/implment에 들어가 configure(HttpSecurity)를 추가해준다.


그리고 웹 요청을 작성해준다.

로그인, 로그아웃도 적어준다.

src/main/java의 controller에 SecurityTestController클래스를 만들어 준다.


그리고 user, member, admin을 getmapping을 시켜준다.

다했으면 VIEW에 admin페이지, member페이지, user페이지를 각각 만들어 준다.




web.xml에 securityfilter를 넣어준다.
그리고 프로젝트를 실행시켜 /login에 들어가면 자동으로 login 페이지가 만들어지는 것을 확인 할 수 있다.

그리고 주소창에 /user, /member, /admin 등 어떠한 경로를 넣든지 간에 /login 화면이 뜨게 된다.
SecurityConfig.java에서 웹 요청 처리한 configure의 바깥에 마우스 우클릭 -> source -> override/implement에 configure(AuthenticationManagerBuilder)를 추가해준다.

임시 계정을 만들어 준다.

그리고 실행시켜 user로 로그인해보면 passwordEncoder 가 매핑되어있지 않다고 에러가 뜨게 된다.


그래서 해결하기 위해 SecurityConfig에서 @Autowired로 passwordEncoder를 해주고 빈도 만들어 준다.

그리고 임시로 만든 계정의 비밀번호에 encode를 해준다.

그리고 다시 user로 로그인하면 로그인 되는 것을 확인 할 수 있다.


지금은 로그아웃이 작동되지 않기 때문에 개발도구를 열어 세션을 삭제해주면 된다.

- member 로그인


- admin 로그인


'IT수업 > STS3' 카테고리의 다른 글
IT 수업 21주차 (142) Security 3_DB연결 (0) | 2024.05.13 |
---|---|
IT 수업 21주차 (141) Security 2 (0) | 2024.05.13 |
IT 수업 21주차 (139) Scheduled (0) | 2024.05.13 |
IT 수업 20주차 (138) Handler Mapping (0) | 2024.05.10 |
IT 수업 20주차 (137) Listener (0) | 2024.05.10 |