Spring Security
는 Java 기반의 웹 응용 프로그램 및 서비스에서 보안을 관리하고 제어하기 위한 프레임워크입니다. 이를 사용하여 사용자 인증, 권한 부여, 보안 설정, 인가 등을 처리할 수 있습니다. Spring Security는 Spring Framework의 일부로서, 개발자가 보안 관련 작업을 간편하게 처리할 수 있도록 도와줍니다.
Spring Security의 주요 기능은 다음과 같습니다:
인증(Authentication)
:
사용자의 신원을 확인하는 과정으로, 사용자가 자신의 신원을 증명하고 시스템에 로그인할 수 있는지 확인하는 것입니다. Spring Security는 다양한 인증 방법을 지원하며, 사용자 이름과 비밀번호, 토큰 기반 인증, OAuth 등을 활용할 수 있습니다.
인가(Authorization)
:
인증된 사용자가 특정 작업 또는 자원에 접근할 수 있는 권한이 있는지를 확인하는 과정입니다. Spring Security는 사용자에 대한 권한과 역할을 관리하며, URL 패턴 또는 메소드 레벨에서 접근 제어를 설정할 수 있습니다.
보안 설정(Security Configuration)
:
Spring Security는 XML 또는 Java 설정을 통해 보안 규칙과 사용자 정의 보안 로직을 정의할 수 있습니다. 이를 통해 어플리케이션의 특정 부분이나 리소스에 대한 접근을 제어하고 보호할 수 있습니다.
세션 관리(Session Management)
:
사용자 세션의 관리와 관련된 기능을 제공합니다. 세션 고정 공격 방어, 동시 로그인 제어 등의 기능을 지원합니다.
Remember-Me 기능
:
사용자가 로그인한 후에도 일정 기간 동안 로그인 상태를 유지하고, 자동으로 로그인하는 기능을 제공합니다.
CSRF(Cross-Site Request Forgery) 보호
:
웹 어플리케이션에서 CSRF 공격을 방지하기 위한 보안 기능을 제공합니다.
CORS(Cross-Origin Resource Sharing) 지원
:
다른 도메인에서 오는 요청에 대한 제어를 제공하여 웹 어플리케이션의 보안을 강화할 수 있습니다.
==================================================================================
1. dependency만 추가해도 Spring Security에서 제공하는 가장 기본적인 인증이 바로 적용됨
기본 로그인 화면이 가장 먼저 나올 것이다.
Username : user (기본 계정)
Password : 비밀번호는 어플리케이션 기동할때 로그로 나오는 Using generated security password 정보
Using generated security password: 94bd75e2-01f8-4f8d-aabf-e960198d7065
This generated password is for development use only. Your security configuration must be updated before running your application in production.
==================================================================================
2.이미지가 보이지 않는 경우.
우선 정적파일들은 시큐리티에 적용되지 않도록 아래와 같이 설정을 한다.
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
// web.ignoring().requestMatchers(PathRequest.toStaticResources().atCommonLocations());
web.ignoring().antMatchers("/css/**", "/js/**", "/img/**", "/lib/**");
}
}
이제 더이상 리소스파일들은 스프링 시큐리티에서 관리를 하지 않는다.
==================================================================================
3.이제 설정에서 유저를 생성한후 , 다시 한번 접속해 보자 , 로그인 창에서 아래의 이름과 비밀번호로 접속해 보자. 그럼 헬로우 월드가 보인다.
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("member").password("{noop}member").roles("USER").and()
.withUser("admin").password("{noop}admin").roles("ADMIN");
}
==================================================================================
4.home.jsp를 제대로 만들고, 아래와 같이 설정하여 / 로 접속후 home.jsp 가 나오는것을 확인한다.
@Override
protected void configure(HttpSecurity http) throws Exception {
//우선 CSRF설정을 해제한다.
//초기 개발시만 해주는게 좋다.
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/member/**").hasAnyRole("ROLE_MEMBER")
.antMatchers("/admin/**").hasAnyRole("ROLE_ADMIN")
.antMatchers("/**").permitAll();
}
==================================================================================