TIL(Web)-2021.02.09(spring boot-security)

BYEONGJUN KIM(JUN)·2021년 2월 15일
0

TIL(Web)

목록 보기
44/45
post-thumbnail

로그인 컨트롤러

  • 로그인을 위한 컨트롤러

Tiles 설정(view)

  • login은 왜 home.*.*인가?
    • root 디렉토리이지만, 이것을 그냥 *.*으로 설정할 경우, 다른 tiles도 모두 호출되어 문제가 발생할 수 있어으므로 루트 디렉토리의 것만 호출한다는 의미로만 home을 붙인다.(의미상으로 추가한것)

spring security 라이브러리 추가

  • spring-boot-starter-security

보안이 필요한 페이지 설정

  • 누군 되고 누군 안되는지?
    • auth.ldap
      • DC도메인 컨트롤러에서 WebServer에 유저 정보를 전달하는 프로토콜
    • auth.jdbcAuthentication
      • 데이터베이스에서 유저정보 가져다 쓸때
    • auth.inMemoryAuthentication
      • 유저의 폭이 좁을때. 메모리에 추가해서 사용하는 방식
        • password에 {noop}을 붙임으로써 비밀번호 인코딩을 제거
  • 어떤건 되고 어떤건 안되는지
    • http.authorizeRequests()
      • 인증요청을 해야하는 url 매핑 정의
    • antMatchers("url")
      • security를 적용하고자 하는 url
      • 주의사항 : /admin/** >> resouces root 디렉토리까지 모두 탐색함.(그냥 /admin/ 으로 하면 /admin/ 을 포함하는 모든 디렉토리가 해당됨)
    • permitAll()
      • 권한 없어도 모두가 접근가능(anonymous까지)
    • hasAnyRole()
      • 해당 권한을 갖고 있는 사람만 접근 가능
    • anthenticated()
      • 인증이 되어야(로그인) 접근 가능
    • formLogin()
      • loginPage("url") : 인증을 필요로 할때 redirect 할 로그인 페이지 설정
      • loginProcessingUrl("url") : 로그인이 진행중인 URL. 즉, 로그인을 위한 form 데이터를 전송한 url
      • defaultSuccessUrl("url") : 필터에 걸려서 로그인 페이지로 간 것이 아닌, 로그인 페이지로 직접 이동하여 로그인을 한 경우, 로그인 성공시 redirect 되는 기본 url
    • logout()
      • logoutUrl("url") : 로그아웃 요청이 들어간 url
      • logoutSuccessUrl("url") : 로그아웃 성공시 redirect되는 url
      • invalidateHttpSession(true/false) : session 초기화 여부

Cross Site Request Forgery

  • get요청을 통해 form을 받고, form 전송을 통해 post요청을 하는데, form을 받아온 사이트와, post요청을 보낼 사이트가 다른경우.
  • 해결
    • get요청에대한 응답을 보낼때 key생성 > post요청시 key 검사
    • 또는 csrf().disable();
      • 위의 사진 참고

메인페이지 controller mapping & tiles 정의

  • controller mapping
  • tiles 정의

로그인 로그아웃 버튼 설정

  • spring-security-taglabs 라이브러리 추가
  • jsp 태그라이브러리 추가
  • spring이 제공하는 expression-based access control 사용하여 ui 조건 검사
    • isAnonymous() : 비인증된 상태인지?
    • isAuthenticated() : 인증된 상태인지?

jdbcAuthentication()

  • spring이 지정한 계정정보 : id, password, disabled
  • spring이 지정한 권한정보 : id, roleId
    • roleId는 무조건 ROLE_*** 형식으로 DB에서 가져와야함
  • 비밀번호가 BCrypt 인코딩 되있다면 검사할때도 같은 인코딩으로 검사 해야함.
@Override
	protected void configure(AuthenticationManagerBuilder auth) throws Exception {
		//누군 되고 누군 안되는지?
		auth .jdbcAuthentication()
				.dataSource(dataSource)
				.usersByUsernameQuery("select uid id, pwd password, 1 enabled from Member where uid=?")
				.authoritiesByUsernameQuery("select uid id, 'ROLE_ADMIN' roleId from Member where uid=?")
				.passwordEncoder(new BCryptPasswordEncoder());

	}
profile
Web Backend 개발자

0개의 댓글