天道酬勤,学无止境

使用请求构建器对用户进行身份验证:在 Spring Security 中不起作用(using request builder to authenticate user: Not working in spring security)

问题

我需要根据记住我的 cookie 对页面中的用户进行身份验证,受此站点的启发:检查 spring 身份验证教程,我想出了一个检查身份验证的解决方案。

在我的应用程序中所做的更改

applicationContext-security.xml:

<intercept-url pattern='/**AuthenticationChecker.html' access="ROLE_ADMIN"/>
...
<form-login login-page="/Login.html" authentication-failure-url="/Login.html" always-use-default-target="true" default-target-url="/Main.html"/>

代码:

try
{
    RequestBuilder rb = new RequestBuilder(
    RequestBuilder.POST, "AuthenticationChecker.html");
            rb.sendRequest(null, new RequestCallback() 
            {
                public void onError(Request request, Throwable exception)
                {
                    RootPanel.get().add(new HTML("[error]" + exception.getMessage()));
                }
                public void onResponseReceived(Request request, Response response)
                {
                    RootPanel.get()
                   .add(new HTML("[success (" + response.getStatusCode() + "," + response.getStatusText() + ")]"));
                }
            }
    );
}
catch (Exception e)
{
    RootPanel.get().add(new HTML("Error sending request " + e.getMessage()));
}

AuthenticationChecker.html 是一个简单的空白 html 页面,据我所知,因为 AuthenticationChecker.html 需要作为管理员的角色,如果记住我 cookie 不存在,我应该得到 401 Unauthorized 如果用户通过身份验证和他的 cookie 得到 200 OK在场。

但是,输出总是显示:[success (200,OK)]

为了交叉检查,我简单地输入了 authenticationaionChecker.html(没有登录),它返回到 Login.html 表明 spring 确实在对用户进行身份验证。

我在这里做错了吗?

回答1

如果您查看本教程,您会看到 401 仅在您使用基本身份验证时返回。 使用基于表单的身份验证,您必须检查响应文本中是否有错误消息。 例如:

public void onResponseReceived(Request request, Response response) {
    if (response.getStatusCode() != Response.SC_OK) {
        onError(request, new RequestException(response.getStatusText() + ":\n" + response.getText()));
        return;
    }

    if (response.getText().contains("Access Denied")) {
        Window.alert("You have entered an incorrect username or password. Please try again.");
    } else {
        // authentication worked, show a fancy dashboard screen
    }
}

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • SpringSecurity
    第一章 SpringSecurity-简介 1. 简介 https://docs.spring.io/spring-security/site/docs/4.2.10.RELEASE/guides/html5/helloworld-xml.html SpringSecurity融合Spring技术栈,提供JavaEE应 用的整体安全解决方案; Spring Security为基于Java EE的企业软件应用提供全面的安全服务。 Spring Security只需要少量配置,就能构建一个强大的安全的应用系统。 目前市面上受欢迎的两个安全框架:Apache Shiro、SpringSecurity; SpringSecurity可以无缝整合Spring应用,具有强大的自动化web安全管控功能。而Shiro是一个轻量级强大的安全框架,可以脱离web应用来提供安全管控,但是对于web的一些定制安全需要手动编写;SpringBoot底层默认整合SpringSecurity作为安全框架,所以我们推荐web应用使用SpringSecurity来控制安全; 2. 概念 认证 authentication:身份验证 “身份验证”是指建立主体(principal)的过程,主体就是他们声称是谁(“主体”通常指用户、设备或在应用程序中可以执行动作的其他系统)。也就是“证明你是谁” 授权
  • Spring Security 框架结构知识(持续更新)
    概述 Spring Security 是一款安全管理框架,在SpringBoot/SpringCloud环境下可以达成0配置的方式集成,非常方便 大致模型 DelegatingFilterProxy Spring提供了一个名为DelegatingFilterProxy的过滤器实现,它允许在Servlet容器的生命周期和Spring的ApplicationContext之间架桥 FilterChainProxy 这是Spring Security提供的过滤器链代理,它被包含在DelegatingFilterProxy过滤器中,在接受请求时会经由FilterChainProxy决定来使用哪一条SecurityFilterChain过滤器链 SecurityFilterChain 这个是由FilterChainProxy代理来决定实例的调用,这样对每一套匹配我们都可以有细致的配置,其中SecurityFilterChain实例下的SecurityFilter一般都是Bean 在过滤器链代理对象中可以有一个或多个过滤器链,在多个过滤器链中一个请求会匹配首个满足匹配条件的过滤器链 默认Chain下的Filter ChannelProcessingFilter:确保web请求通过通道的过滤器ConcurrentSessionFilter:并发会话处理包所需的过滤器,这个过滤器会进行两个操作
  • 使用 Postman 测试 Spring 安全性(Testing spring security with Postman)
    问题 我已经使用 Spring 安全性配置了基于表单的身份验证。 当我使用 Web 应用程序中的登录表单登录时,它工作正常。 它也适用于 cURL: curl --data "j_username=myname&j_password=mypassword" http://localhost:8080/test/j_spring_security_check --verbose 但是,我无法使用 Postman 使其正常工作: 什么东西少了? 我需要通过身份验证才能测试其他服务。 回答1 最后,我通过使用 Postman Interceptor chrome 扩展使 Postman 意识到身份验证 启用扩展后(通过单击 Postman 应用程序中的卫星图标),您只需要使用 Web 的登录表单登录,然后您就可以开始使用需要在 Postman 中进行身份验证的服务。 回答2 您可以通过授权选项卡下的邮递员下拉列表中给出的各种授权类型在邮递员中实现身份验证/授权。 以下是使用默认情况下 spring 安全提供的基本身份验证的步骤。 在 spring security 中,您可以在 application.properties 文件中自定义您的凭据,如下所示。 spring.security.user.name=你 spring.security.user.password=galem
  • 春季安全性:未经身份验证的授权(spring-security: authorization without authentication)
    问题 我正在尝试将Spring Security集成到我的Web应用程序中。 只要集成了身份验证和授权的整个过程,这似乎就很容易做到。 但是,身份验证和授权看起来是如此耦合,以至于我了解如何拆分这些过程以及独立于授权来获取身份验证非常耗时。 身份验证过程在我们系统的外部(基于单点登录),无法修改。 但是,一旦用户成功完成此过程,就会将其加载到会话中,包括角色。 我们正在尝试实现的是在Spring Security的授权过程中使用此信息,也就是说,强制它从用户会话中获取角色,而不是通过身份验证提供程序来获取。 有什么办法可以做到这一点? 回答1 如果已经使用SSO服务完成了身份验证,则应使用spring security的预身份验证过滤器之一。 然后,您可以指定一个UserDetails服务(可能是自定义的),该服务将使用预先认证的用户原则填充GrantedAuthority的 SpringSecurity包括几个预认证过滤器,包括J2eePreAuthenticatedProcessingFilter和RequestHeaderPreAuthenticatedProcessingFilter。 如果找不到适合自己的解决方案,那么只要您知道您的SSO实施在数据中填充的位置,就可以自己编写它,也没有那么困难。 (这取决于课程的实施。) 只需实现Filter接口
  • 记住我和身份验证成功处理程序(remember-me and authentication-success-handler)
    问题 我有登录成功并重定向到页面的奇怪问题。 下面是我的春季安全配置。 <http auto-config="true" use-expressions="true"> <intercept-url pattern="/login.hst**" access="anonymous or authenticated" /> <intercept-url pattern="/**/*.hst" access="authenticated" /> <form-login login-page="/login.hst" authentication-failure-url="/login.hst?error=true" authentication-success-handler-ref="loginSucessHandler" /> <logout invalidate-session="true" logout-success-url="/home.hst" logout-url="/logout.hst" /> <remember-me key="jbcpHaverERP" authentication-success-handler-ref="loginSucessHandler"/> <session-management> <concurrency-control max
  • 为移动应用程序创建 API - 身份验证和授权(Creating an API for mobile applications - Authentication and Authorization)
    问题 概述 我正在为我的应用程序创建一个 (REST) API。 最初/主要目的是供移动应用程序(iPhone、Android、Symbian 等)使用。 我一直在研究基于 Web 的 API 的不同身份验证和授权机制(通过研究其他实现)。 我已经对大部分基本概念进行了思考,但仍在寻找一些领域的指导。 我想做的最后一件事是重新发明轮子,但我没有找到任何符合我的标准的标准解决方案(但是我的标准被误导了,所以也可以随意批评)。 此外,我希望 API 对于所有使用它的平台/应用程序都是相同的。 oAuth 我会继续并抛出我对 oAuth 的反对意见,因为我知道这可能是提供的第一个解决方案。 对于移动应用程序(或更具体地说是非 Web 应用程序),让应用程序(转到 Web 浏览器)进行身份验证似乎是错误的。 此外,浏览器无法(我知道)将回调返回给应用程序(尤其是跨平台)。 我知道有几个应用程序可以做到这一点,但它只是感觉不对并且在应用程序用户体验中出现了中断。 要求 用户在应用程序中输入用户名/密码。 每个 API 调用都由调用应用程序标识。 开销保持在最低限度,并且身份验证方面对开发人员来说是直观的。 该机制对最终用户(他们的登录凭据未公开)和开发人员(他们的应用程序凭据未公开)都是安全的。 如果可能,不需要 https(绝不是硬性要求)。 我目前对实施的想法 外部开发人员将请求 API
  • Spring Security学习笔记
    1.特点 # 1.1认证方式 如果用户没有设置密码,则系统会自动生成一个密码在控制台打印。 参考UserDetailsServiceAutoConfiguration类中这段代码: package org.springframework.boot.autoconfigure.security.servlet; private String getOrDeducePassword(User user, PasswordEncoder encoder) { String password = user.getPassword(); if (user.isPasswordGenerated()) { logger.info(String.format("%n%nUsing generated security password: %s%n", user.getPassword())); } 生成密码的来源在SecurityProperties配置类中的静态内部类User里面: package org.springframework.boot.autoconfigure.security; private String name = "user"; private String password = UUID.randomUUID().toString(); 用户配置
  • 使用Java跨不同域的单一登录[SSO](Single Sign On [SSO] across different domains using Java)
    问题 我们正在跨多个应用程序实施单点登录[SSO],这些应用程序托管在不同的域和不同的服务器上。 现在,如图所示,我们引入了一个身份验证服务器,该服务器实际上与LDAP交互并对用户进行身份验证。 将用于身份验证服务器/与身份验证服务器对话的应用程序托管在不同的服务器和域中。 对于SSO,我不能使用会话变量,因为存在不同的服务器和不同的应用程序,不同的域,域级别的cookie /会话变量没有帮助。 我正在寻找一个更好的解决方案,可用于他们的SSO。 是否存在任何已证明的实现? 如果是这样,请张贴它或为此指出正确的方向。 回答1 您可以通过在身份验证服务器上进行所有登录来实现此目的。 其他应用程序可以通过反向通道与身份验证服务器进行通信。 一般原则是这样的: 用户访问应用程序1。 应用程序1需要用户登录,因此它通过反向通道将令牌发送到auth服务器。 然后,应用程序1使用令牌作为请求中的参数将用户重定向到auth服务器上的登录页面。 用户登录认证服务器。 验证服务器设置cookie,将令牌标记为已通过身份验证,并将用户详细信息与其关联。 然后,身份验证服务器将用户重定向回应用程序1。 应用程序1从用户那里获取请求,并通过反向通道调用auth服务器,以检查令牌是否正常。 使用用户详细信息验证服务器响应。 现在,应用程序1知道该用户已被授权并具有一些基本的用户详细信息。
  • Spring Security 3.2.1具有不同WebSecurityConfigurerAdapters的多个登录表单(Spring Security 3.2.1 Multiple login forms with distinct WebSecurityConfigurerAdapters)
    问题 我正在将Spring Security 3.2.1.RELEASE与Spring MVC 4.0.4.RELEASE一起使用 我正在尝试为将具有两个不同的登录条目页面的Web应用程序设置Spring Security。 我需要页面是不同的,因为它们的样式和访问方式会有所不同。 第一个登录页面面向管理员用户,并保护管理页面/ admin / ** 第二个登录页面适用于客户用户,并保护客户页面/ customer / **。 我尝试设置WebSecurityConfigurerAdapter的两个子类来配置单个HttpSecurity对象。 CustomerFormLoginWebSecurity可以保护客户页面,并在未经授权的情况下重定向到客户登录页面。 如果未授权,则AdminFormLoginWebSecurity可以保护重定向到管理登录页面的管理页面。 不幸的是,似乎只有第一个配置是强制性的。 我认为我缺少一些额外的东西来使这两种方法都能正常工作。 @Configuration @EnableWebSecurity public class SecurityConfig { @Autowired public void registerGlobalAuthentication(AuthenticationManagerBuilder auth) throws
  • REST端点身份验证的Spring Security意外行为?(Spring Security unexpected behavior for REST endpoints authentication?)
    问题 我们要找的场景如下: 客户端通过 REST 连接到 REST 登录 url Spring 微服务(使用 Spring Security)应该返回200 OK和一个登录令牌客户端保留令牌客户端使用相同的令牌调用其他 REST 端点。 但是,我看到客户端正在获取302和Location标头以及令牌。 所以它确实进行了身份验证,但带有不想要的 HTTP 响应状态代码和标头。 Spring Security 配置如下所示: @Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .csrf() .disable() // Refactor login form // See https://jira.springsource.org/browse/SPR-11496 .headers() .addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsHeaderWriter.XFrameOptionsMode
  • Spring OAuth2 - 没有客户端身份验证。 尝试添加适当的身份验证过滤器(Spring OAuth2 - There is no client authentication. Try adding an appropriate authentication filter)
    问题 我们有一个使用spring-security-oauth2:1.0的应用程序。 我试图将其更改为更新版本spring-security-oauth2:2.0.7.RELEASE 。 删除了一些类,更改了一些包结构,我设法解决了所有这些问题,并且能够毫无问题地启动服务器。 但我在这里面临一个奇怪的问题。 使用OAuth2 - 1.0 version ,当用户登录时,我们曾经在/oauth/token上执行GET请求,例如: http://localhost:8080/echo/oauth/token?grant_type=password&client_id=ws&client_secret=secret&scope=read,write&username=john@abc.com&password=password123 它曾经工作得很好。 当我尝试同样的事情时,首先,由于 TokenEndPoint.java 中的逻辑,我无法发出GET请求 private Set<HttpMethod> allowedRequestMethods = new HashSet<HttpMethod>(Arrays.asList(HttpMethod.POST)); @RequestMapping(value = "/oauth/token", method=RequestMethod.GET
  • Spring Security筛选器链如何工作(How Spring Security Filter Chain works)
    问题 我意识到Spring安全性是建立在过滤器链上的,该过滤器将拦截请求,检测(不存在)身份验证,重定向到身份验证入口点或将请求传递给授权服务,并最终让该请求到达servlet或引发安全异常(未经身份验证或未经授权)。 DelegatingFitlerProxy将这些过滤器粘合在一起。 为了执行任务,这些筛选器访问服务,例如UserDetailsS​​ervice和AuthenticationManager 。 链中的关键过滤器为(按顺序) SecurityContextPersistenceFilter(从JSESSIONID恢复身份验证) UsernamePasswordAuthenticationFilter(执行身份验证) ExceptionTranslationFilter(从FilterSecurityInterceptor捕获安全异常) FilterSecurityInterceptor(可能会抛出身份验证和授权异常) 我很困惑如何使用这些过滤器。 难道对于Spring提供的form-login, UsernamePasswordAuthenticationFilter仅用于/ login ,而后面的过滤器不可用? 表单登录名称空间元素是否自动配置这些过滤器? 是否每个请求(无论是否经过身份验证)都到达非登录URL的FilterSecurityInterceptor
  • 使用Spring Security时,在bean中获取当前用户名(即SecurityContext)信息的正确方法是什么?(When using Spring Security, what is the proper way to obtain current username (i.e. SecurityContext) information in a bean?)
    问题 我有一个使用Spring Security的Spring MVC Web应用程序。 我想知道当前登录用户的用户名。 我正在使用下面给出的代码片段。 这是公认的方式吗? 我不喜欢在此控制器内调用静态方法-这违反了Spring,恕我直言的全部目的。 有没有一种方法可以配置应用程序以注入当前的SecurityContext或当前的Authentication? @RequestMapping(method = RequestMethod.GET) public ModelAndView showResults(final HttpServletRequest request...) { final String currentUser = SecurityContextHolder.getContext().getAuthentication().getName(); ... } 回答1 如果您使用的是Spring 3,最简单的方法是: @RequestMapping(method = RequestMethod.GET) public ModelAndView showResults(final HttpServletRequest request, Principal principal) { final String currentUser = principal
  • 使用Liferay在REST服务中进行身份验证和授权(Authentication and authorization in REST Services with Liferay)
    问题 我们正在构建一些将通过RESTful API公开的服务。 该API的主要客户是使用Angular JS的Liferay Portlet,这意味着可以直接从客户端(Angular)调用我们的服务。 到目前为止,我们已经设计了一种身份验证和授权机制,以确保我们可以识别出哪个登录用户(Liferay)正在请求我们的API 。 PS .:请注意,尽管我们使用Liferay,但它可以是任何其他基于Java的应用程序。 我们设计的是: 当用户登录我们的门户网站时,Liferay将使用userLogin(或ID)+客户端IP +时间戳创建身份验证令牌。 此令牌保存在cookie中; 在每个REST调用之前,Angular都会读取该cookie并通过HTTP标头发送其内容; 我们的服务“解密”所发送的Cookie内容,并验证时间戳是否有效,IP是否相同以及根据我们的业务规则是否允许用户访问或读取他想做的任何事情。 目前,这种设计对我们来说是一致的,并且根据我们选择创建此令牌的算法,我们认为这是一种安全的方法。 我们的怀疑是: 我们是否在某种程度上重新发明了不使用HTTP身份验证和自定义提供程序的轮子? 如何? Spring Security可以帮助我们吗? 我们已经阅读了一些有关它的文章,但是尚不清楚将其与非Spring应用程序一起使用是否有意义。 我们没有考虑使用此方法的任何安全缺陷吗?
  • 为什么 Android 指纹认证需要加密对象?(Why crypto object is needed for Android fingerprint authentication?)
    问题 我已经浏览了 Google 提供的 android 指纹样本。 https://github.com/googlesamples/android-FingerprintDialog 由于我是安全标准的新手,我无法理解以下内容。 为什么我们需要使用 Keystore、key、CryptoObject...等? 简单的可能就像,要求指纹管理器对用户进行身份验证,它可以简单地返回状态(成功/失败) 每次身份验证时都需要生成新密钥吗? 回答1 为什么我们需要使用 Keystore、key、CryptoObject...等? 简单的可能就像,要求指纹管理器对用户进行身份验证,它可以简单地返回状态(成功/失败) 你不必。 您可以在没有CryptoObject情况下进行指纹认证,只需传递一个null值。 然后就不必弄乱密钥库和其他东西了。 CryptoObject在指纹认证上下文中的唯一用途是了解自上次用户通过指纹认证以来是否添加了新指纹。 每次身份验证时都需要生成新密钥吗? 如果添加了新指纹,则必须提示输入密码以验证用户身份,然后生成新密钥(因为添加新指纹时它们已失效)。 如果你传递一个null CryptoObject你就不必再弄乱这些了 一个观点问题 指纹认证不需要 CryptoObject,事实上恰恰相反。 当您在 Android 上进行加密操作时,您可以使用以下对象之一:密码
  • asp.net 5中的Windows身份验证(Windows authentication in asp.net 5)
    问题 我正在ASP.NET 5,MVC 6中构建Intranet应用程序。我想知道如何启用Windows身份验证。 默认项目模板仅支持个人用户帐户。 回答1 Mark的答案在ASP.Net RC1中仍然有效。 还有一些其他步骤可以将它们捆绑在一起(我没有足够的声誉来评论他的解决方案): 从NuGet安装WebListener 将以下用法添加到Startcup.cs中: using Microsoft.AspNet.Http.Features; using Microsoft.Net.Http.Server; 在app.UseMvc之前的Configure方法中添加Mark的代码段: // If we're self-hosting, enable integrated authentication (if we're using // IIS, this will be done at the IIS configuration level). var listener = app.ServerFeatures.Get<WebListener>(); if (listener != null) { listener.AuthenticationManager.AuthenticationSchemes = AuthenticationSchemes.NTLM; } 要调试它
  • Spring-Security学习笔记【二】Authentication认证
    文章目录 SpringSecurity中的认证:Authentication简单案例 典型web应用验证授权过程ExceptionTranslationFilterAuthenticationEntryPointAuthentication MechanismStoring the SecurityContext between requests SpringSecurity中的认证:Authentication 我们先来考虑一个最正常不过的用户信息验证场景: 提示用户使用用户名和密码登录。系统(成功)验证用户名的密码是否正确。获取该用户的上下文信息(他们的角色列表等)。为用户建立安全上下文。用户继续操作,可能会执行一些操作,这些操作可能受到访问控制机制的保护,该机制根据当前安全上下文信息检查操作所需的权限。 前四项构成了身份验证过程,而这些在Spring Security中是如何发生的呢? 用户名和密码被获取并组合到UsernamePasswordAuthenticationToken的实例中(Authentication接口的实例)。token令牌被传递到AuthenticationManager的实例进行验证。身份验证成功时,AuthenticationManager将返回一个完全填充的身份验证实例。安全上下文是通过调用SecurityContextHolder
  • Springboot之Security前后端分离登录
    Springboot之Security前后端分离登录 什么是Spring Security初识Security具体代码实现1 引入Security包2 创建Security配置类3 创建UserInfo类4 实现UserDetailsService5 提供前端一个登录接口6 SecurityUtils 工具类7 登录验证总结 什么是Spring Security Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它是用于保护基于Spring的应用程序的实际标准。 Spring Security是一个框架,致力于为Java应用程序提供身份验证和授权。与所有Spring项目一样,Spring Security的真正强大之处在于可以轻松扩展以满足自定义要求 官方网站:https://spring.io/projects/spring-security#learn 初识Security 因为之前已经接触过其他的权限框架:shiro 所以很好入门 比较好的入门博文: Springboot + Spring Security 实现前后端分离登录认证及权限控制 Springboot集成SpringSecurity 附代码 关于SpringBoot应用中集成Spring Security你必须了解的那些事 Spring Boot Security 具体代码实现
  • Spring中的Websocket身份验证和授权(Websocket Authentication and Authorization in Spring)
    问题 我一直在努力用Spring-Security正确实现Stomp(websocket)身份验证和授权。 对于后代,我将回答我自己的问题以提供指导。 问题 Spring WebSocket文档(用于身份验证)看起来不清楚ATM(IMHO)。 而且我不明白如何正确处理身份验证和授权。 我想要的是 使用登录名/密码对用户进行身份验证。 防止匿名用户通过WebSocket连接。 添加授权层(用户,管理员等)。 在控制器中具有Principal 。 我不想要的 在HTTP协商端点上进行身份验证(因为大多数JavaScript库都不随HTTP协商调用一起发送身份验证标头)。 回答1 如上所述,文档(ATM)尚不清楚(IMHO),在Spring提供一些清晰的文档之前,这是一个样板,可避免您花两天的时间来了解安全链的功能。 Rob-Leggett做出了一个非常不错的尝试,但是他在Springs上课了,所以我感到不舒服。 要知道的事情: http和WebSocket的安全链和安全配置是完全独立的。 Spring AuthenticationProvider完全不参与Websocket身份验证。 HTTP协商终结点上不会进行身份验证,因为没有JavaScript STOMP(网络套接字)会随HTTP请求一起发送必要的身份验证标头。 一旦在CONNECT请求上设置,该用户( simpUser
  • HttpSecurity,WebSecurity和AuthenticationManagerBuilder(HttpSecurity, WebSecurity and AuthenticationManagerBuilder)
    问题 谁能解释何时覆盖configure(HttpSecurity) , configure(WebSecurity)和configure(AuthenticationManagerBuilder) ? 回答1 configure(AuthenticationManagerBuilder)用于通过允许轻松添加AuthenticationProviders来建立身份验证机制:例如,以下内容定义了带有内置“用户”和“管理员”登录名的内存中身份验证。 public void configure(AuthenticationManagerBuilder auth) { auth .inMemoryAuthentication() .withUser("user") .password("password") .roles("USER") .and() .withUser("admin") .password("password") .roles("ADMIN","USER"); } configure(HttpSecurity)允许基于选择匹配在资源级别配置基于Web的安全性-例如,以下示例将以/ admin /开头的URL限制为具有ADMIN角色的用户,并声明需要使用其他任何URL成功认证。 protected void configure(HttpSecurity http)