복붙노트

[SPRING] 스프링 보안 익명 액세스를 가능하게하는 Java 기반 구성

SPRING

스프링 보안 익명 액세스를 가능하게하는 Java 기반 구성

"ROLE_ANONYMOUS"를 사용하여 내 앱의 일부 URL에 대한 익명 액세스를 허용하고 싶습니다. 그리고 아래의 구성을 사용했습니다.

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .requestCache()
            .requestCache(new NullRequestCache()).and()
        .anonymous().authorities("ROLE_ANONYMOUS").and()
        .exceptionHandling().and()
        .servletApi().and()
        .headers().cacheControl().and()
        .authorizeRequests()
            .antMatchers("/").permitAll()
            .antMatchers("/profile/image").permitAll()
            .antMatchers("/favicon.ico").permitAll()
            .antMatchers("/resources/**").permitAll()

            //.antMatchers(HttpMethod.GET, "/login/**").permitAll()
            //.antMatchers(HttpMethod.GET, "/location/**").permitAll()

            .anyRequest().authenticated()/*.and()
            .apply(new SpringSocialConfigurer())*/;

        // custom Token based authentication based on the header previously given to the client
        //.addFilterBefore(new StatelessAuthenticationFilter(tokenAuthenticationService), UsernamePasswordAuthenticationFilter.class);
}

내 컨트롤러는 다음과 같습니다.

@RestController
@RequestMapping(value="/login", produces="application/json")
public class LoginController {


    @Secured( value={"ROLE_ANONYMOUS"})
    @RequestMapping(method=RequestMethod.GET)
    public String get(){
        return "hello";
    }
}

하지만 "/ login"을 클릭하면 403 액세스가 거부됩니다. 주석 기반 익명 액세스를 활성화하는 방법을 알려주십시오.

해결법

  1. ==============================

    1.Faraj Farook이 쓴대로 로그인 페이지 URL에 대한 액세스를 허용해야합니다. 관련 라인을 주석 처리했습니다.

    Faraj Farook이 쓴대로 로그인 페이지 URL에 대한 액세스를 허용해야합니다. 관련 라인을 주석 처리했습니다.

    @Override
    protected void configure(HttpSecurity http) throws Exception {
         http
            .anonymous()
                .authorities("ROLE_ANONYMOUS")
                .and()
            .headers()
                 .cacheControl()
                 .and()
            .authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/profile/image").permitAll()
                .antMatchers("/favicon.ico").permitAll()
                .antMatchers("/resources/**").permitAll()
    
                .antMatchers(HttpMethod.GET, "/login/**").permitAll()
    
                .anyRequest().authenticated()
    }
    

    그러나 permitAll ()을 사용하지 않으려면 hasAuthority ( "ROLE_ANONYMOUS")를 사용할 수 있습니다. 이 경우 메소드에 주석을 달 필요가 없습니다. @Secured (값 = { "ROLE_ANONYMOUS"}).

  2. ==============================

    2.이렇게하면 문제가 해결됩니다.

    이렇게하면 문제가 해결됩니다.

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            ...
            .formLogin().loginPage("/login").permitAll()
            ...
    

    그러나 permitAll을 사용하지 않고 익명의 사용자에게 맡기고 싶다면 (두 상황 모두 동일한 효과가 있지만 그래도 사용자가 선호하는 경우) 컨트롤러에서이 작업을 시도하십시오.

    @Secured("ROLE_ANONYMOUS")
    @RequestMapping(method=RequestMethod.GET)
    public String get(){
        ...
    
  3. from https://stackoverflow.com/questions/33327677/java-based-configuration-to-enable-spring-security-anonymous-access by cc-by-sa and MIT license