programing

왜 '익명'이스프링 시큐리티에서 인증된 사용자?

lovejava 2023. 11. 5. 10:47

왜 '익명'이스프링 시큐리티에서 인증된 사용자?

이것은 제 메인컨트롤러입니다.

package org.demian.demibox.controllers;

import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class MainController {
    private String getUsername() {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        if (auth.isAuthenticated())
            return auth.getName();
        else
            return null;
    }
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String showHome() {
        String username = getUsername();
        System.out.println(username);
        if (username == null || username.length() == 0)
            return "welcome";
        return "index";
    }
}

로그인이 되어있지 않지만,auth.isAuthenticated()항상 돌아옵니다.true.왜 그런 것일까요?그리고 언제쯤?auth.isAuthenticated()거짓으로 돌려주십니까?인증된 사용자의 이름은anonymousUser로그인하지 않은 경우에는 사용자 이름을 입력합니다.

편집

이것은 나의security-context.xml파일:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:security="http://www.springframework.org/schema/security"
    xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <security:authentication-manager>
        <security:authentication-provider>
            <security:jdbc-user-service data-source-ref="dataSource" id="jdbcUserService" />
            <!-- <security:password-encoder ref="passwordEncoder" /> -->
        </security:authentication-provider>
    </security:authentication-manager>
    <security:http use-expressions="true">
        <security:intercept-url pattern="/" access="permitAll" />
        <security:intercept-url pattern="/login" access="permitAll" />
        <security:intercept-url pattern="/redeem" access="permitAll" />
        <security:intercept-url pattern="/redeem_code" access="permitAll" />
        <security:intercept-url pattern="/static/**" access="permitAll" />
        <security:intercept-url pattern="/*" access="isAuthenticated()" />
        <security:intercept-url pattern="/**" access="isAuthenticated()" />
        <security:intercept-url pattern="/**" access="denyAll" />
        <security:form-login login-page="/login" authentication-failure-url="/login?error=true" />
        <security:logout logout-success-url="/" />
        <security:remember-me key="offersAppKey" user-service-ref="jdbcUserService" />
    </security:http>
    <security:global-method-security secured-annotations="enabled" />
    <!-- <bean id="passwordEncoder" class="org.springframework.security.crypto.password.StandardPasswordEncoder" /> -->
</beans>

그리고 다음의 대사들은 다음과 같습니다.web.xml파일:

<filter>
    <display-name>springSecurityFilterChain</display-name>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

저는 Tomcat 8.0과 메이븐을 통해 모든 최신 종속성을 사용하고 있습니다.

스프링 보안은 기본적으로 이렇게 작동합니다.

문서에서:

"익명 인증"된 사용자와 인증되지 않은 사용자 사이에는 실질적인 개념적 차이가 없습니다.Spring Security의 익명 인증 기능은 액세스 제어 속성을 보다 편리하게 구성할 수 있습니다.다음과 같은 서블릿 API 호출에 대한 호출getCallerPrincipal, 예를 들어, 은 실제로 익명 인증 개체가 있는 경우에도 여전히 null을 반환합니다.SecurityContextHolder.

익명 인증이 유용한 다른 상황이 있습니다. 예를 들어 감사 인터셉트가 다음과 같이SecurityContextHolder어떤 주체가 특정 작업에 책임이 있는지 확인합니다.수업은 다음과 같은 내용을 알고 있으면 보다 강력하게 작성할 수 있습니다.SecurityContextHolder항상 포함하고 있습니다.Authenticationobject, null이 아닙니다.

혹시 확인이 필요한 경우에는anonymousUser그 다음에 당신은 확인할 수 있습니다.Authentication목적은AnonymousAuthenticationToken예든 아니든

언급URL : https://stackoverflow.com/questions/26101738/why-is-the-anonymoususer-authenticated-in-spring-security