반응형
Spring-boot을 사용한 보안 구성
Spring-Boot용 Spring Security 구성 클래스를 만들었습니다.내 로그인 페이지에는 리소스 CSS, js 및 ico 파일이 있습니다.보안상의 이유로 리소스가 거부되고 매번 로그인 페이지로 리디렉션됩니다.EnableWebMVCsecurity가 클래스 경로 리소스 위치를 추가하지 않는 이유는 무엇입니까?두 번째 스니펫에서와 같이 코드를 변경한 후 I 클래스path 리소스 위치가 추가됩니다. 첫 번째 코드 스니펫의 리소스에 대해 내가 무엇을 놓쳤는지 이해하지 못합니다.
@Configuration
/*
* Enable Spring Security’s web security support and provide the Spring MVC integration
* It also extends WebSecurityConfigurerAdapter
and overrides a couple of its methods to set some specifics of the web security configuration.
*/
@EnableWebMvcSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
/**
* The configure(HttpSecurity) method defines with URL paths should be
* secured and which should not.
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated();
// There is a custom "/login" page specified by loginPage(), and everyone
// is allowed to view it.
http
.formLogin()
.loginPage("/login.html")
.permitAll()
.and()
.logout()
.permitAll().logoutSuccessUrl("/login.html");
}
@Configuration
protected static class AuthenticationConfiguration extends
GlobalAuthenticationConfigurerAdapter {
@Override
public void init(AuthenticationManagerBuilder auth) throws Exception {
// As for the configure(AuthenticationManagerBuilder) method, it sets up
// an in-memory user store with a single user. That user is given a
// username of "user", a password of "password", and a role of "USER".
auth
.inMemoryAuthentication()
.withUser("user@domain.com").password("password").roles("USER");
}
}
코드를 변경하여 이 작업을 수행했습니다.
@Configuration
/*
* Enable Spring Security’s web security support and provide the Spring MVC integration
* It also extends WebSecurityConfigurerAdapter
and overrides a couple of its methods to set some specifics of the web security configuration.
*/
public class WebSecurityConfig{
@Bean
public ApplicationSecurity applicationSecurity() {
return new ApplicationSecurity();
}
@Bean
public AuthenticationSecurity authenticationSecurity() {
return new AuthenticationSecurity();
}
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
protected static class ApplicationSecurity extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated();
http
.formLogin()
.loginPage("/login.html")
.permitAll()
.and()
.logout()
.permitAll().logoutSuccessUrl("/login.html");
}
}
@Order(Ordered.HIGHEST_PRECEDENCE + 10)
protected static class AuthenticationSecurity extends
GlobalAuthenticationConfigurerAdapter {
@Override
public void init(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user@domain.com").password("password").roles("USER");
}
}
}
코드를 변경한 후 경로 무시가 필터에 추가되었으며 로그에 다음이 표시됩니다.
[ost-startStop-1] os.s.web.기본 SecurityFilterChain : 필터 체인을 만드는 중:개미 [개미=개미/**'], [][ost-startStop-1] os.s.web.기본 SecurityFilterChain : 필터 체인을 만드는 중:개미 [nots=notsjs/**'], [][ost-startStop-1] os.s.web.기본 SecurityFilterChain : 필터 체인을 만드는 중:개미 [개미=개미/**'], [][ost-startStop-1] os.s.web.기본 SecurityFilterChain : 필터 체인을 만드는 중:개미 [conts=conts**/contsicon.ico'], [][ost-startStop-1] os.s.web.기본 SecurityFilterChain : 필터 체인 org.springframework를 만드는 중입니다.보안.web.sys.matcher.AnyRequestMatcher@1, [org.스프링 프레임워크].보안.웹.vmdk.request.vmdkc.WebAsync ManagerIntegrationFilter@4e3e0069, org.스프링 프레임워크.보안.거미줄.SecurityContextPersistenceFilter@3d2dd0cf, org.springframework.보안.거미줄.HeaderWriterFilter@33fc3b02, org.springframework.보안.web.csrf.CsrfFilter@9b7a3ac, org.스프링 프레임워크.보안.web.authentication.logout.LogoutFilter@267237ef, org.springframework.보안.웹.인증사용자 이름 암호AuthenticationFilter@129495ef, org.springframework.보안.web.authentication.ui.기본 LoginPageGeneratingFilter@7db0a467, org.springframework.보안.web.authentication.www.BasicAuthenticationFilter@764d1dbd, org.springframework.보안.웹.vmdk 요청요청CacheAwareFilter@25a5268d, org.springframework.보안.web.servletapi.SecurityContextHolderAwareRequestFilter@15c01d0c, org.springframework.보안.웹.인증익명AuthenticationFilter@37818a3b, org.springframework.보안.거미줄.SessionManagementFilter@3fe57e49, org.springframework.보안.웹.액세스예외TranslationFilter@4278af59, org.springframework.보안.웹.액세스가로채다필터 보안가로채기 @424bef91]
첫 번째 예에서 다음을 사용하여 스프링 부트 자동 구성을 비활성화한 문서에 따라@EnableWebSecurity
따라서 모든 정적 리소스를 수동으로 무시해야 합니다. 두번예는단다히제공음니다합을순서에째▁a▁provide다를 제공합니다.WebSecurityConfigurer
기본 자동 구성 위에 추가됩니다.
클래스를 확장하고 주석을 추가하는 구성 파일을 만듭니다.
다음과 같은 방법을 재정의할 수 있습니다.configure(HttpSecurity http)
와 같은 합니다.
@Configuration
@EnableWebSecurity
public class AppWebSecurityConfigurer extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.anyRequest().permitAll();
}
}
보안 구성에서 CSS와 JS에 대한 우회 보안에 아래 방법을 추가합니다.
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/css/** **","/js/** **");
}
언급URL : https://stackoverflow.com/questions/25633477/security-configuration-with-spring-boot
반응형
'IT' 카테고리의 다른 글
스프링 부트 테스트를 특정 프로필이 활성화된 경우에만 실행되도록 표시할 수 있습니까? (0) | 2023.07.17 |
---|---|
브라우저를 통한 카메라 액세스 (0) | 2023.07.17 |
원격 Git 저장소에서 풀링하고 로컬 저장소의 변경 사항을 재정의하려면 어떻게 해야 합니까? (0) | 2023.07.17 |
OS X Mavericks에 RODBC/ROACLE 패키지 설치 (0) | 2023.07.17 |
콘다와 함께 사용할 수 있는 패키지 버전을 나열하는 방법 (0) | 2023.07.17 |