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 필요함.
프로젝트를 만들어주는 사이트
*** 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 |