• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

스프링 시큐리티 ignoring() "/favicon.ico" 리다이렉션 질문

21.03.01 11:12 작성 조회수 620

0

안녕하세요, 스프링 시큐리티 ignoring() 1부 강의를 듣던 중, 백기선님이 구동한 웹 애플리케이션 결과와 제 결과와 달라서 질문을 드립니다.

해당 강의에서 SecurityConfig 파일의 config(WebSecurity web) 메서드를 오버라이딩해서 "/favicon.ico"와 같은 경로의 요청들을 무시하도록 설정하여 루트 요청을 하면 "/login" 요청이 더이상 필요하지 않게끔 하셨는데요,

저도 강의에서 하신대로 똑같이 설정을 하였는데도, 여전히 "/",  "favicon.ico",  "/login" 이렇게 3가지 요청이 수행됩니다. "/favicon.ico" 요청 응답 코드는 302이구요.

아래는 제 SecurityConfig 자바 파일입니다. 어느 부분이 달라서 그런 것 인가요?

package me.whiteship.demospringsecurityform.config;

import me.whiteship.demospringsecurityform.account.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.security.servlet.PathRequest;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.access.AccessDecisionManager;
import org.springframework.security.access.AccessDecisionVoter;
import org.springframework.security.access.expression.SecurityExpressionHandler;
import org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl;
import org.springframework.security.access.vote.AffirmativeBased;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler;
import org.springframework.security.web.access.expression.WebExpressionVoter;

import java.util.Arrays;
import java.util.List;
import java.util.zip.DataFormatException;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    public SecurityExpressionHandler expressionHandler() {
        RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();
        roleHierarchy.setHierarchy("ROLE_ADMIN > ROLE_USER");

        DefaultWebSecurityExpressionHandler handler = new DefaultWebSecurityExpressionHandler();
        handler.setRoleHierarchy(roleHierarchy);

        return handler;
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
//        web.ignoring().mvcMatchers("/favicon.ico");
        web.ignoring().requestMatchers(PathRequest.toStaticResources().atCommonLocations());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .mvcMatchers("/", "/info", "/account/**").permitAll()
                .mvcMatchers("/admin").hasRole("ADMIN")
                .mvcMatchers("/user").hasRole("USER")
                .anyRequest().authenticated()
                .expressionHandler(expressionHandler());
        http.formLogin();
        http.httpBasic();
    }

}

답변 1

답변을 작성해보세요.

0

시큐리티 설정은 정상적으로 보이네요. 애플리케이션 구동을 종료하고 다시 실행해도 같은 문제가 반복되나요?

문제가 재현되는 코드를 깃헙에 올려서 공유해주시면 좀 더 살펴보겠습니다.