java - 获取身份验证以在 Tomcat 上使用 Spring Boot

标签 java tomcat spring-security spring-boot

我正在尝试让 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);
}

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

非常感谢您的帮助!

最佳答案

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

关于java - 获取身份验证以在 Tomcat 上使用 Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24841894/

相关文章:

java.lang.ExceptionInInitializerError Apache 汤姆猫

java - 这个 SQL 语法有什么问题?

java - Spring Security 不拦截

java - 在initialize()中加载FXML

tomcat - 在 Tomcat 中运行的 JRuby Rails3 应用程序 session 超时

java - 使用 JAX-RS Jersey 进行身份验证和授权的简便方法

java - 如何在 Spring Security hasRole() 中评估变量表达式

spring-security - 在 spring oauth2 中使用 ResourceServerConfiguration.configure 类中的 HttpSecurity.requestMatchers

java - 使用 addEntity 获取 hibernate 中表的特定列

java - 情书-使用数组打印消息