본문 바로가기

Java/Spring

SpringBoot 설치

Spring Tools 4 for Eclipse (sts사이트에서 설치)

boot bersion 3점대 버전은 java17이상만 사용가능

SNAPSHOT : 개발중

# EclipseMarketplace : eclipse web Developer tools 설치

-> web 설정 UTF-8로 바꾸기

# springBoot에서는 기본적으로 jsp파일 지원x

jsp 해석하는 jasper lib 필요함.

https://start.spring.io/

프로젝트를 만들어주는 사이트


*** sec 프로젝트 참고하기

mybtis lib 추가 시 database 설정 정보 없으면 실행 안됨.

aplication.properties에 아래 내용 작성

\# server.port 설정

server.port=8081

\# database 설정

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.url=jdbc:mysql://localhost:3306/digital\_spring

spring.datasource.username=digital

spring.datasource.password=12345

** security 설정이 되어 있지 않을 경우

username == user

password는 부팅 시 console 확인

# fileUtils.jar 추가 시 buildPath -> add to builPath 해줘야됨.

SecApplication 설정 정보

SpringBootApplication : 해당 클래스가 존재하는 위치의 하위 패키지에 component들을 자동 스캔함
스캔해야할 패키지보다 하위 패키지에 해당 클래스가 존재하는 경우 base 패키지 지정필요

@SpringBootApplication 
// SpringBootApplication class 보다 하위 package의 component를 scan해서 bean으로 등록
//@ComponentScan( basePackages = {"com.bitc.sec.controller"})
@MapperScan(basePackages = {"com.bitc.sec.dao"})
// mybatis-spring-scan interface 구현 Mapper Class 생성 후 bean으로 등록
public class SecApplication {

설정 파일 클래스 생성 config (WebSecurityConfig)

@Configuration // method가 반환하는 객체를 servlet container의 bean으로 등록시켜주는 설정파일.
@Bean // 이 method가 반환하는 객체를 bean으로 등록 (이때 bean이름은 메소드 이름)

@Configuration // method가 반환하는 객체를 servlet container의 bean으로 등록시켜주는 설정파일.
@EnableWebSecurity // Security Filter Chain추가
public class WebSecurityConfig {

    @Bean 
    public WebSecurityCustomizer webCustomizer() {
        // resources 요청 들어오면 security 무시하도록 등록
        return (web) -> web.ignoring().antMatchers("/resources/**");
    }

    @Bean
    public LoginSuccessHandler loginSuccessHandler() {
        return new LoginSuccessHandler();
    }

    @Bean
    public CustomAccessDeniedHandler customAccessDeniedHandler() {
        return new CustomAccessDeniedHandler();
    }


    @Bean // 이 method가 반환하는 객체를 bean으로 등록 (이때 bean이름은 메소드 이름)
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

시큐리티 필터체인 등록

@Bean
    public SecurityFilterChain fileChain(HttpSecurity http) throws Exception{
        http.formLogin().loginPage("/user/login")
                        .usernameParameter("u_id")
                        .passwordParameter("u_pw")
                        .loginProcessingUrl("/user/login")
                        .successHandler(loginSuccessHandler());
        // remember me
        http.rememberMe().rememberMeCookieName("userCookie")
                         .rememberMeParameter("rememberme")
                         .tokenValiditySeconds(6040800);
        // session
        http.sessionManagement().maximumSessions(1)
                                .expiredUrl("/logoff")
                                // true 이면 최대 세션 수에 도달했을 때 사용자가 인증하지 못하도록 함.
                                // 그렇지 않으면(기본값:false) 인증하는 사용자는 액세스 되고 기존 사용자의 세션 만료
                                .maxSessionsPreventsLogin(false);
        // 로그아웃
        http.logout().logoutUrl("/user/logout").logoutSuccessUrl("/").deleteCookies("userCookie");
           // denied
        http.exceptionHandling().accessDeniedHandler(customAccessDeniedHandler());

        // interceptor-url (권한체크할 요청경로)
        http.authorizeRequests().mvcMatchers("/mngt/user/**").access("hasRole('ROLE_ADMIN')")
                                .mvcMatchers("/mngt/**").access("hasAnyRole('ROLE_MEMBERSHIP','ROLE_ADMIN')")
                                .mvcMatchers("/user/logout").authenticated()
                                .mvcMatchers("/user/**","/logoff","/").permitAll()
                                .mvcMatchers("/**").authenticated();
        return http.build();
    }

AuthenticationManager 생성

@Autowired
    CustomUserDetailsService userDetailsService;

    // AuthenticationManager 생성
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception{
        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    }

WebMvcConfigurer

web.xml을 대신 또는 보충하는 class

WebSocketConfig

ChatHandler 는 @Component 추가

@Configuration
@EnableWebSocket
// 지정된 요청 경로로 client와 고정된 통신을 등록하는 class
@RequiredArgsConstructor
public class WebSocketConfig implements WebSocketConfigurer {

    private final ChatHandler chatHandler;

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        // js로 전달된 데이터의 end point 지정
        registry.addHandler(chatHandler, "/chatHandler").withSockJS();
    }

}

'Java > Spring' 카테고리의 다른 글

개념정리 - Spring  (0) 2023.10.24
인텔리 j  (0) 2023.08.31
채팅구현 - 웹소켓통신  (0) 2023.08.28
spring security & DB 연계  (0) 2023.08.28
SPRING SECURITY 보안프레임워크  (0) 2023.08.25