当前位置: 首页 > 面试题库 >

甚至在带有filter =“ none”的公共页面上也检索Spring Security的身份验证

宗沛
2023-03-14
问题内容

假设我有一个名为faq.html的简单页面。我希望此页面可以公开访问,因此我应用了通常的Spring Security配置:

<sec:intercept-url pattern="/faq.html" filters="none" />

我们还说,如果用户在身份验证后到达此页面,我想在页面上打印“ Hi Firstname
Lastname”。对于需要身份验证的页面,我只需将以下结果放入我的中ModelMap,然后可以在以后的视图中访问这些名称:

SecurityContextHolder.getContext().getAuthentication().getPrincipal()

这不适用于faq.html,大概是因为当您指定时filters="none",然后的呼叫会getPrincipal()传回null。(此行为是有道理的,因为该配置不会应用任何过滤器。)因此,相反,我似乎不得不手动执行许多Spring
Security任务:

public static Authentication authenticate(HttpServletRequest request,
        HttpServletResponse response, SecurityContextRepository repo,
        RememberMeServices rememberMeServices) {
    Authentication auth = SecurityContextHolder.getContext().getAuthentication();

    // try to load a previous Authentication from the repository
    if (auth == null) {
        SecurityContext context = repo.loadContext(
                new HttpRequestResponseHolder(request, response));
        auth = context.getAuthentication();
    }

    // check for remember-me token
    if (auth == null) {
        auth = rememberMeServices.autoLogin(request, response);
    }

    return auth;
}

有一个更好的方法吗?例如,似乎Spring应该提供一些工具来通过原始<sec:intercept-url />配置挂接其API调用。


问题答案:

这就是不filters = "none"用于公共页面的原因。

使用access = "permitAll"代替(或者access = "IS_AUTHENTICATED_ANONYMOUSLY, IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED"如果没有use-expressions = "true")。



 类似资料:
  • 应如何管理它们? 一些更具体的问题: 根据定义,本机应用程序(实际上是公共客户端)不能安全地存储其凭据(client_id+secret)。是未注册的客户吗?如果我不能使用秘密来验证/验证它,我还应该做什么? 客户端注册≠endpoint注册:第一个是关于注册客户端凭据();第二个关于注册客户端重定向endpoint。重定向endpoint注册是否足以授予客户端的真实性? 客户端凭据授予是否使用相

  • 我想在Docker上设置一个配置了身份验证的Cassandra容器。目前我使用的是官方的Cassandra Docker图像,但它似乎没有提供启用认证模式的选项(通过ENV thingies)。 一种可能性是设置一个自己的存储库,从Cassandra Docker GitHub克隆并修改此文件,以便它也接受与身份验证相关的选项,但对于我非常简单的任务来说,这似乎有点复杂。有没有人知道一个更简单的解

  • 问题内容: 我正在努力为使用网关的REST API设计SAML2.0身份验证。在我的后端和应用程序之间使用REST。我正在使用Java Servlet过滤器和Spring。 我看到两种可能性: 每次将SAML令牌添加到标头中。 使用SAML进行一次身份验证,然后使用客户端与网关之间的会话或类似(安全对话)进行身份验证。 情况1: 这是一个很好的解决方案,因为我们仍然是RESTful,但是: SAM

  • 问题内容: 这是我的情况: 一个Web应用程序对许多应用程序执行某种SSO 登录的用户,而不是单击链接,该应用就会向正确的应用发布包含用户信息(名称,pwd [无用],角色)的帖子 我正在其中一个应用程序上实现SpringSecurity以从其功能中受益(会话中的权限,其类提供的方法等) 因此,我需要开发一个 自定义过滤器 -我猜想-能够从请求中检索用户信息,通过自定义 DetailsUserSe

  • 我有一个简单的Spring Boot web应用程序,由2个页面组成: 主页(可自由访问),网址为 在url上的安全页(需要登录才能访问) 在主页中,我打印访问用户的名字(如果他/她已经通过身份验证的话),或者显示该页面被匿名用户访问的句子。 这里是Spring Security配置: 如果用户已经通过身份验证,问题是主页显示他是匿名的,因为总是。 但是,如果用户回到家里时进入安全页面(Keycl

  • 问题内容: 我正在尝试将API查询输入python。命令行 提供一些json输出。myToken是一个十六进制变量,始终保持不变。我想从python进行此调用,以便我可以遍历不同的id并分析输出。有任何想法吗?在需要身份验证之前,我已经使用urllib2进行了此操作。我也查看了请求模块,但无法弄清楚该怎么做。 非常感谢。 问题答案: 该请求包有一个用于HTTP请求的一个非常好的API,加入了自定义