为什么在Spring Security中对“ anonymousUser”进行身份验证?

爱丽儿

这是我的主控制器:

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()返回false?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>

我正在通过Maven使用Tomcat 8.0和所有最新的依赖项。

亚历山大·M

默认情况下,这就是spring-security的工作方式。

文档

注意,“匿名认证”的用户和未经认证的用户之间没有真正的概念差异。Spring Security的匿名身份验证只是为您提供了一种更便捷的方式来配置访问控制属性。getCallerPrincipal即使确实存在匿名身份验证对象,对Servlet API调用的调用(例如)仍将返回null SecurityContextHolder

在其他情况下,匿名身份验证很有用,例如,当审核拦截器查询时,SecurityContextHolder以标识哪个主体负责给定操作。如果类知道SecurityContextHolder总是包含一个Authentication对象且从不为null,则可以更强大地编写类

如果需要检查是否为,anonymousUser则可以检查Authentication对象是否AnonymousAuthenticationToken实例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Spring Security进行身份验证

如果在java spring security 中登录身份验证失败,如何获取anonymousUser 用户名?

Spring Security中的链式身份验证

为什么在 spring-security 中记住我的身份验证比完全身份验证要少?

为什么故障处理在Spring Security X.509身份验证中不起作用?

使用Spring Security + Spring数据+ MongoDB进行身份验证

使用 Spring Security 进行身份验证的端点

通过REST端点进行Spring Security身份验证/授权

Spring Security中如何使用Cookie进行基本身份验证?

在Spring Security中无法通过email_id对用户进行身份验证

如何在Spring Security中通过email_id或contact_number进行身份验证?

为什么在Spring REST应用程序中成功进行身份验证后Principal为null?

身份验证提供者从Spring Security通过ReST API调用对用户进行身份验证

在Spring Security中捕获“记住我”身份验证事件

在 Spring Security 中捕获身份验证失败

在Spring Security中接收令牌的基本身份验证

从Spring Security身份验证日志中删除日志

如何在Spring Security中关闭Websocket的身份验证?

为什么Spring Security身份验证会导致CORS错误

Spring Security对用户进行身份验证时,如何在会话中管理自定义用户对象?

Spring Security OAuth2中的auth_code授予是否可以进行匿名身份验证?

使用RestTemplate的Spring Security身份验证

身份验证失败的Spring Security Wildfly

使用UserDetailsService的Spring Security身份验证

Spring Security Rest Basic身份验证

使用Spring Boot 2和Spring Security 5进行多重身份验证

使用Spring Security和Keycloak进行Spring Websockets身份验证

针对Active Directory进行LDAP身份验证的可接受的SECURITY_PRINCIPAL格式是什么?

使用Spring Security oauth2进行两因素身份验证