在 Tomcat 上使用 Spring Boot 进行身份验证

Posted

技术标签:

【中文标题】在 Tomcat 上使用 Spring Boot 进行身份验证【英文标题】:Getting Authentication To Work With Spring Boot On Tomcat 【发布时间】:2014-09-10 14:07:47 【问题描述】:

我正在尝试让spring-boot-starter-securityspring-boot-starter-webspring-boot-starter-tomcat 一起工作。我尝试按照spring-boot-sample-secure 和spring-boot-sample-web-secure 的指南进行操作,但没有成功。

我正在尝试构建一个没有任何 ui 交互的 REST 应用程序。因此,我发现这两个样本都不完全适合我的目的。目前我的解决方案是使用 AOP。

ControllerMonitor.java:

@Before("execution(* my.zin.rashidi.openshift.tomcat.controller.*.*(..)) && args(authorization, ..)")
public void authenticate(String authorization) 

    if (!isEmpty(authorization)) 
        SecurityContextHolder.getContext().setAuthentication(
                new UsernamePasswordAuthenticationToken("user", "N/A",
                        AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_USER"))
        );
    

UserController.java:

@RequestMapping(method = GET)
public ResponseEntity<User> get(@RequestHeader String authorization, @RequestBody User user) 
    HttpStatus status = OK;
    User returnObject = null;

    try 
        returnObject = service.get(user);
     catch (AuthenticationCredentialsNotFoundException e) 
        status = UNAUTHORIZED;
    

    return new ResponseEntity<User>(returnObject, status);

解决方案对我有用。但是我想知道这是否是一个好的解决方案。我很好奇是否有更好的解决方案。

在此先感谢您的帮助!

【问题讨论】:

目前还不清楚你用它实现了什么。它是身份验证端点吗?为什么需要 AOP?客户端是否必须发送 cookie 来验证其他请求,所以您使用 Spring Security 来管理这些请求? 嗨戴夫·赛尔。客户端将在每个请求的标头中发送“授权”。 AOP 将验证授权,在这种情况下只是确保它不为空,然后再继续处理请求。我正在使用 Spring Security 来存储用户的角色并在服务类中使用 @Secured。 另外关于我想要实现的目标。我正在尝试做一些类似于 spring-boot-secure-sample 但用于 web 的事情。没有 UI 交互,每次请求都会对客户端进行身份验证。 我不清楚如何对与UserController 不同的控制器的请求进行身份验证。 UserController 本身甚至有一种方法与切入点不匹配。那么任何人都可以在您的系统中创建新用户? 我还没有创建其他控制器,但我的计划是将它们存储在同一个包中,它们的参数也将以authorization 开头。你说得对。任何人都可以创建用户。 【参考方案1】:

我不想为每个控制器方法添加可选参数,因为它是可选的,所以忘记的风险非常高。您征求意见,我认为更好的解决方案是使用更正常的 Spring Security 方法和过滤器(如果足够好,则标准基本身份验证,或者可能是像预身份验证这样的自定义过滤器,例如,如果它没有不能满足您的需求)。您可以在 Spring Boot 应用程序中获得开箱即用的 http 基本安全性,因此您根本不需要做任何事情即可开始使用。

【讨论】:

“你在 Spring Boot 应用程序中获得了开箱即用的 http 基本安全性,所以你根本不需要做任何事情来开始”,我一定在某个地方错过了这个。有网址可以参考吗? 文档链接:docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/… 您还可以向用户索取凭据并在服务器启动后动态设置它们(当您需要在客户环境中发布解决方案时非常有效);检查此代码示例:***.com/a/47526134/6792588

以上是关于在 Tomcat 上使用 Spring Boot 进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

使用tomcat在spring boot上读取控制台输入

在 Spring Boot 上更改嵌入式 tomcat 版本

Spring Boot War 文件部署在 Tomcat 上

在 tomcat 上部署 Spring Boot WAR 文件显示错误 404

在一个 Tomcat 上运行多个 Spring-boot 应用程序

如何在嵌入式 tomcat 服务器上部署 Spring Boot Web 应用程序,来自 Spring Boot 本身