본문 바로가기

SpringSecurity

(37)
SpringSecurity(Form 인증구현) 잠시 자바 기초 공부하느라 ㅜㅜ 스프링시큐리티를 하지 못했다 다시 시작하자.. ㅠ 오늘은 사용자를 데이터베이스에 저장 하는거 까지 했다 오늘은 데이터베이스 사용자의 권한정보를 등록 하고 연동 해보는 작업을 해보자! Spring Security 5.0 이전에는 기본 PasswordEncoder 가 평문을 지원하는 NoOpPasswordEncoder 암호화 포맷 : {id}encodedPassword bcrypt, noop, pbkdf2, scrypt, sha256 (기본 포맷은 Bcrypt : {bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG) 생성 PasswordEncoder passwordEncoder = PasswordEncod..
SpringSecurity(사용자 DB등록 및 PasswrodEncoder) 사용자를 등록해보자! SecurityConfigs 클래스를 보자 이전 포스팅에서 권한설정을 해준것을 기억한다 그리고 webignore 설정도 해줬다 passwrodEncoeder를 호출한다 사용자가 입력하는 비밀번호도 암호화 해주기 위해서다. DB에 사용자가 등록될수 있도록 기능을 추가해도록 해보자 Account 클래스를 만들어주자 @어노테이션들이 있는데 이것들은 나중에 JPA 관련해서 포스팅을 하도록하자 회원정보들을 데이터 베이스 에 저장하기 위해 Account테이블과 아이디, 이름 ,비밀번호 이메일 나이,권한 컬럼을 만들어주자 사용자가 입력한 값들을 받을수 있게 Dto 클래스를 만들어주자 회원정보들을 저장하기 위해서 service 패키지와 repository 패키지를 만들어주자 UserService ..
SpringSecurity 프로젝트 구성 프로젝트 기본 구성 의존성 설정, 환경 설정, UI화면 구성, 기본 CURD기능 스프링 시큐리티 보안 기능을 점진적으로 구현 및 완성 SpringSecurity, SpringMVC, SpringDataJPA DB - Postgresql Server 프로젝트 명 : core-spring-security 기본 의존관계 설정 - pom.xml 기본 패키지 및 폴더 구성 기본 View Template 생성 기본 정적 자원 설정 ModulSetting으로 디렉토리를 구성했다 이상한게 바로 new 에서 새로운 파일을 만들면 controller.admin.user 이렇게 나오는데 이유를 모르겠다 구글링 해도 나오지도 않아서 Modeul을 사용했는데 혹시나 AddcontentRoot 에서 경로를 + 해주면 되나 싶어서..
SpringSecurity(아키텍처 정리) 초기화 과정부터 한번 살펴보자 SpringSecurity가 초기화 되면서 사용자가 설정한 Api 구성대로 HttpSecurity클래스가 필터들을 생성한다. 이후에 생성된 필터들은 WebSecurity 클래스로 전달하게 된다 그리고 다시 FilterChainProxy에게 빈객체를 생성자로 생성하여 WebSecurity에서 전달받은 Filter들을 FilterChainProxy 에게 전달한다 그러면 FilterChainProxy 는 사용자가 설정한 2개의 설정 클래스들을 가지게 된다. DelegatingFilterProxy 이클래스는 servlet필터 인데 이클래스도 초기화 될때 이미 FilterChainProxy 빈으로 생성된다 DelegatingFilterProxy 는 springSecurityFilte..
SpringSecuirty(AccessDecisionManager,AccessDecisionVoter) 인증 정보, 요청정보, 권한정보를 이용해서 사용자의 자원접근을 허용할 것인지 거부할 것인지를 최종 결정하는 주체 여러 개의 Voter 들을 가질 수있으며 Voter 들로부터 접근허용, 거부, 보류에 해당하는 각각의 값을 리턴받고 판단 및 결정 최종 접근 거부 시 예외 발생 접근결정의 세가지 유형 AffirmativeBased 여러개의 Voter 클래스 중 하나라도 접근 허가로 결론을 내면 접근 허가로 판단한다 ConsensusBased 다수표(승인 및 거부)에 의해 최종 결정을 판단한다 동수일경우 기본은 접근허가이나 allowIfEqualGrantedDeniedDecisions 을 false 로 설정할 경우 접근거부로 결정된다 UnanimousBased 모든 보터가 만장일치로 접근을 승인해야 하며 그렇지..
SpringSecurity(Authorization,FilterSecurityInterceptor) 이전까지 인증에 대하여 계속 공부해봤다 이제인가 처리를 한번 공부해보자 한다 인가는 말그대로 사용자가 로그인 했을때 서버자원에 접근할수 잇는 자격이 있는지 여부를 판단하는게 인가처리 라고 할수있다. 그래서 SprginSecurity는 Authentication과 Authorization 두개를 처리하도록 되어 있다. 위에 그림을 보면 사용자가 서버 자원에 접근하려 할때 그 사용자가 Authenticated 먼저 인증을 받았는지 안받았는지 확인을 하게된다 이후에 Authorization 에서 해당자원에 설정된 권한에 충분한 자격이 있는지 권한 심사를 하게된다. 스프링 시큐리티가 지원하는 권한계층을 살펴보자 웹 계층 URL 요청에 따른 메뉴 혹은 화면단위의 레벨보안 사용자가 user라는 경로로 자원에 접근하..
SpringSecurity(AuthenticationProvider) AuthenticationProvider(인증처리자 / 인터페이스) 이클래스는 인증과정에서 가장 핵심적인 클래스가 생각하면된다 . 사용자의 이름과 패스워드를 받아서 검증을 하는 클래스이다. AuthenticationManager가 요청정보를 받아서 해당하는 Provider를 호출한 후에 요청에 대한 인증처리를 하게된다. 인증이 성공게되면 인증결과를 생성해서 자신을 호출한 Manager에게 인증객체르 전달하는 역할 까지 AuthenticationProvider가 하게된다. authenticate , supports 두개의 메서드가 존재한다 authenticate 여기서 실질적으로 검증을 하게되고 AuthenticationManager와 동일하게 인증객체를 전달받는다. 인증객체 안에는 사용자가 입력한 아이디..
SpringSecurity(AuthenticationManager) AuthenticationProvider 목록중에서 인증 처리 요건에 맞는 AuthenticationProvider 를 찾아 인증처리를 위임한다 부모ProviderManager 를 설정하여 AuthenticationProvider를 계속 탐색 할 수 있다 AutheticationManager는 인증처리를 하는 첫번째 클래스이다. 사용자의 아이디와 패스워드를 Authentication(인증객체)에 담아서 AutheticationManager 에게 전달함으로써 AutheticationManager는 전반적으로 인증에 관해 모든 처리를 관리한다 AutheticationManager 인터페이스고 구현체가 ProviderManager이다 ProviderManager가 초기화 되면서 Provider타입의 객체들을 ..