왜 '익명'이스프링 시큐리티에서 인증된 사용자?
이것은 제 메인컨트롤러입니다.
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
항상 포함하고 있습니다.Authentication
object, null이 아닙니다.
혹시 확인이 필요한 경우에는anonymousUser
그 다음에 당신은 확인할 수 있습니다.Authentication
목적은AnonymousAuthenticationToken
예든 아니든
언급URL : https://stackoverflow.com/questions/26101738/why-is-the-anonymoususer-authenticated-in-spring-security
'programing' 카테고리의 다른 글
셸의 파이프로 n개의 명령어를 연결? (0) | 2023.11.05 |
---|---|
작동 오류: (2002, "socket '/var/run/mysqld/mysqld를 통해 로컬 MySQL 서버에 연결할 수 없습니다.양말'(2)) (0) | 2023.11.05 |
C#에서 단일 Oracle 명령어로 여러 쿼리 실행 (0) | 2023.11.05 |
드롭다운 메뉴를 만들기 위해 Ajax와 JSON을 사용하는 방법은? (0) | 2023.11.05 |
Powershell Console에서 여러 줄 문자열을 할당하는 방법 (0) | 2023.11.05 |