My footsteps

스프링 / 10 본문

국비수업/수업정리

스프링 / 10

밀김 2023. 6. 13. 15:05
728x90

 

 

 

 

 

 

 

 

 

 

 

   //2. JDBC를 이용한 사용자 정보 
   public UserDetailsService jdbcUserDetailsService() {
	JdbcUserDetailsManager manager = new JdbcUserDetailsManager();
	manager.setUsersByUsernameQuery("select username, pwd password, 1 enabled from member where username=?");
	return manager ;
   }

위 코드 해석

 

 

 

- 셀렉트에다가 서브쿼리를 쓰는건 좋지 않은 방법이다(조인을 사용해야함)

 

 

 

 

 

 

   //2. JDBC를 이용한 사용자 정보 
   public UserDetailsService jdbcUserDetailsService() {
	JdbcUserDetailsManager manager = new JdbcUserDetailsManager();
	manager.setUsersByUsernameQuery("select username, pwd password, 1 enabled from member where username=?");
	manager.setAuthoritiesByUsernameQuery("select username,r.name authority from role r join member m on r.id where user name=?");
	return manager ;
	   
   }

위의 코드는 앞선 코드에서 UserDetailsService 인터페이스의 구현을 생성하는 메서드에 더하여, 권한(Authority) 정보를 데이터베이스에서 조회하는 SQL 쿼리를 추가한 것입니다.

기존 코드에서 manager.setAuthoritiesByUsernameQuery 메서드를 추가하였습니다. 이 메서드는 권한 정보를 데이터베이스에서 조회하기 위한 SQL 쿼리를 설정합니다. 쿼리는 "role" 테이블과 "member" 테이블을 조인하여 사용자의 권한(authority) 정보를 조회합니다. "r.name"은 권한 이름을 나타내며, "username"과 "r.id"는 사용자와 권한 간의 연결을 나타내는 조인 조건입니다.

따라서 이 코드는 데이터베이스에서 사용자 정보와 권한 정보를 함께 조회하여 인증 및 권한 부여를 처리하는 UserDetailsService의 구현을 생성합니다. 스프링 시큐리티에서는 이러한 UserDetailsService를 사용하여 사용자 인증과 권한 부여를 한꺼번에 처리할 수 있습니다.

 

 

 

 

- 허락하고 싶은 페이지는 @Bean을 열어놓으면 된다

 

 

 

 

   @Bean
   public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
	   
	   http
	   	.authorizeRequests()
	   .requestMatchers("/member/**").hasAnyRole("MEMBER")
	   	.anyRequest().permitAll();
      
      return http.build();
      //반환타입: 디폴트 보안 필터 체인
   }

 

 

 

 

    .formLogin(
            form->form
            .loginPage("/sign-in")
            .loginProcessingUrl("") //post 요청

            );

 

 

 

- cors : corss origin이라는 뜻. get을 받아와서 다른쪽으로 post하는걸 의미한다 

 

 

 

 

http
        //.cors(cors->cors.disable())
        .csrf(csrf->csrf.disable())
        .authorizeHttpRequests(
                auth -> auth
        .requestMatchers("/member/**").hasAnyRole("MEMBER","ADMIN") //ROLE
        .anyRequest().permitAll()
                )

 

 

       <a
              sec:authorize="isAnonymous()()"
              href="/sign-in"
              class="icon icon-person"
              title="로그인 페이지로 이동합니다."
              >
              로그인</a
            >
            //로그인을 안한 익명 상태일때는 로그인하라고 보여주고
               <a
               sec:authorize="isAuthenticated()"
              href="/logout"
              class="icon icon-sign-out"
              title="로그아웃 페이지로 이동합니다."
              >
              로그아웃</a
            >
            //익명아닐땐 로그아웃 보이게

 

 

 

            <a
               sec:authorize="hasRole('ADMIN')"
              href="/member/index"
              class="icon icon-person"
              title="메뉴관리 페이지로 이동합니다."
              >
              회원관리</a
            >
            //관리자는 이렇게. 특정권한이나 상황에 따라 보여줄까 말까~할때 씀

 

 

 

 

 

 

 

 

 

 

 

728x90

'국비수업 > 수업정리' 카테고리의 다른 글

RestController  (0) 2023.06.15
스프링 / 11  (0) 2023.06.14
스프링 / 9  (0) 2023.06.12
스프링 / 6  (0) 2023.06.07
스프링 / 5  (0) 2023.06.05