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

如何禁用RESTful端点的基于Spring表单的登录?

西门庆
2023-03-14
问题内容

我已经使用了基本的和基于表单的身份验证来配置spring-security auto-config='true'

我希望下面的端点/api/**不使用基于表单的安全性。外部的其他端点/api/**应使用基于表单的登录名。我希望401收到对未提供凭据的这些端点的任何呼叫的响应/api/**

更新 :感谢下面的卢克·泰勒的评论,我想出了以下解决方案

注意 :只能从spring-security 3.1开始应用此技术。

首先,我单挑/api/**。我们永远不会创建会话,尽管会使用一个会话,这是由create-session="never"和处理的<session- management/>

<http pattern="/api/**" create-session="never" use-expressions="true">
    <http-basic />
    <session-management />
    <intercept-url pattern="/api/**" access="hasRole('API_ACCESS')"/>
</http>

<http auto-config="true" use-expressions="true">
    <intercept-url pattern="/" access="permitAll"/>
    <intercept-url pattern="/**" access="isAuthenticated()"/>
</http>

问题答案:

使用Spring Security
3.1,最好的选择是通过使用两个单独的<http>元素将应用程序的静态和非静态部分拆分为单独的过滤器链。然后可以将静态API链配置为无状态并使用基本身份验证,而默认链可以使用常规的表单登录配置。

然后,您将得到类似:

<http pattern="/api/**" create-session="stateless">
    <intercept-url pattern="/api/**" access="ROLE_API_USER" />
    <http-basic />        
</http>

<!-- No pattern attribute, so defaults to matching any request -->
<http>
    <intercept-url pattern="/**" access="ROLE_USER" />
    <form-login />        
</http>

链定义必须从最特定的模式到最通用的顺序进行排序,因此默认链位于最后。



 类似资料:
  • 根据,我使用基本和基于表单的身份验证配置了Spring Security。 我希望下的endpoint不要使用基于表单的安全性。之外的其他endpoint应使用基于表单的登录。我想要一个响应,发送给那些没有在下提供凭据的endpoint的任何调用。 更新:感谢卢克·泰勒在下面的评论,我想出了以下解决方案。 注意:此技术仅适用于Spring Security 3.1。 首先,我挑出。我们从不创建会话

  • 使用基于表单的JAAS、MySQL、Apache TomEE、JSP、Servlet 我知道如何配置基于表单的JAAS,当用户试图访问安全页面时,自动将用户重定向到登录页面。基本上,我已经为TomEE和MySQL配置了JDBC领域(在文件中),在中,我已经声明了、和。 然后,有以下登录表单: 而且,这对于在web.xml中的标记中声明的页面很好。 但是,我想有明确的访问一个页面,用户可以登录。那么

  • 编辑: 在尝试了几天的各种安全配置更改之后,我把。permitall()放在每个应该授权/验证任何请求的endpoint上。但即便如此,尽管我可以自由地“浏览”任何页面而无需验证,但我的设备客户端仍然无法向其正常的应用程序endpoint提交PUT请求。 所以现在的问题是,为什么远程客户机可以成功地向运行在1.5.4 Spring Boot版本上的应用程序提交PUT请求,而当“相同的应用程序”运行

  • 我有一个网站,用户必须通过单点登录(SAML SSO)才能访问该网站。该网站有一个GUI,他们可以在其中输入信息并发送到服务器。 现在,我正在构建一些RESTful api调用(没有GUI)。调用的URL如下所示:https://example.com/api/do-work.此资源是一个python脚本。 但是,这些调用还没有身份验证设置,我想通过SSO进行。 我正在考虑通过linux命令行和c

  • 我正在编写一个小的应用程序,它有一个链接到数据库的身份验证,这个身份验证将由Oauth2方面(由@enableAuthorizationServer和@enableResourceServer注释的类)管理。在同一个应用程序中,管理页面有另一个身份验证,该页面将链接到另一个不同的数据库,并将使用常规的基于表单的身份验证。 为此,我编写了以下Web安全配置类: 其他相关组成部分有: 授权服务器配置:

  • 我正在尝试为自己构建一个仪表板,为我使用的一些应用程序提供基于SAML的身份验证。 从我作为测试平台构建的: 我正在使用一个登录名作为我要使用的应用程序的身份提供者。 举个例子:对于Netflix,我被重新路由到Netflix页面,我的用户ID和密码被预先填入其中,就像密码管理器的工作方式一样。(它使用OneLogin的扩展名) Netflix是否允许基于SAML的单点登录身份验证?我无法从谷歌搜