当前位置: 首页 > 知识库问答 >
问题:

Spring Boot身份验证

公良英资
2023-03-14

我几乎没有Spring boot控制器类来公开rest web服务。每当有用户试图访问这些服务时,我需要调用一个web服务来检查用户(用户id将作为RequestHeader传递)是否被授权。如果未经授权,需要向用户显示错误页面(freemarker模板)。

我不想编写一个方法来调用身份验证Web服务,并从每个控制器方法调用它,抛出一个异常,并使用@ControllerAdvice将用户重定向到拒绝访问错误页面,因为这里我必须从所有控制器方法调用该方法。

我不确定是否可以使用WebSecurityConfigureAdapter/AuthenticationManagerBuilder调用Web服务并进行验证。

我正在寻找一种解决方案,我将编写一个拦截器,spring boot将在调用控制器类之前调用webservice,并且如果验证失败,将能够重定向到错误页面。

共有1个答案

陶和歌
2023-03-14

作为建议,花几分钟时间阅读有关Spring Security的内容(https://projects.spring.io/spring-security/),您必须对其进行html" target="_blank">配置,并且可能会花费比预期更多的时间,无论如何,您的利润比我们自己的安全性高出很多。

好处是:

@PreAuthorize("hasRole('ROLE_USER')")

在每个地方,你都可以让用户通过SecurityContext登录,比如:

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String currentPrincipalName = authentication.getName();

SpringSecurity使用JWT(JsonWebToken)对用户进行身份验证的方式这是一种非常好的方式,因为您可以传递和检索所有需要的信息:

public class CustomTokenEnhancer implements TokenEnhancer {

@Override
public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
    User user = (User) authentication.getPrincipal();
    final Map<String, Object> additionalInfo = new HashMap<>();

    additionalInfo.put("customInfo", "some_stuff_here");
    additionalInfo.put("authorities", user.getAuthorities());

    ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo);

    return accessToken;
}

}

你可以忘记所有可能的问题(错误的身份验证,网络钓鱼,xss或csrf...),因为它与公钥/私钥和秘密一起工作,所以任何人都可以创建令牌。

 类似资料:
  • 我正在使用SpringBoot开发具有微服务架构的Rest Backend。为了保护endpoint,我使用了JWT令牌机制。我正在使用Zuul API网关。 如果请求需要权限(来自JWT的角色),它将被转发到正确的微服务。Zuul api网关的“WebSecurityConfigrerAdapter”如下。 这样,我必须在这个类中编写每个请求授权部分。因此,我希望使用方法级安全性,即“Enabl

  • 我在Spring Boot web应用程序中有一个非常特殊的要求:我有内部和外部用户。内部用户通过使用KeyCoap身份验证登录到web应用程序(他们可以在web应用程序中工作),但我们的外部用户通过简单的Spring Boot身份验证登录(他们可以做的只是下载web应用程序生成的一些文件) 我想做的是使用多个身份验证模型:除了/download/*之外的所有路径都要通过我们的keyCoap身份验

  • 身份验证 PDF版下载 企业应用中的URL链接可以通过OAuth2.0验证接口来获取员工的身份信息。 通过此接口获取员工身份会有一定的时间开销。对于频繁获取员工身份的场景,建议采用如下方案: 企业应用中的URL链接直接填写企业自己的页面地址; 员工跳转到企业页面时,企业校验是否有代表员工身份的cookie,此cookie由企业生成; 如果没有获取到cookie,重定向到OAuth验证链接,获取员工

  • 我正在编写一个程序,用于验证通过HTTP POST发送的用户名和密码,并根据ldap进行验证,无论验证是否成功,都将响应发送回用户。 我的Websecurity配置器实现 我的测试服务器.ldif

  • 问题内容: 我正在尝试在Node.js中使用Socket.IO,并试图允许服务器为每个Socket.IO客户端赋予一个身份。由于套接字代码不在http服务器代码的范围内,因此无法轻松访问已发送的请求信息,因此我假设在连接期间需要将其发送出去。什么是最好的方法 1)将有关谁通过Socket.IO连接到服务器的信息 2)验证他们说的是谁(如果正在使事情变得更容易,我目前正在使用Express) 问题答

  • 我试图使用swift代码在网站上找到这里,但响应是html代码与两个错误:“您必须输入密码!”和“您必须输入用户名!”我是NSURLSession的新手,试图更改用于身份验证的字符串,但无法更改响应。下面是我的代码: 这是控制台响应中的内容:

  • 我正在开发一个具有自己的身份验证和授权机制的REST应用程序。我想使用JSON Web Tokens进行身份验证。以下是有效且安全的实现吗? < li >将开发一个REST API来接受用户名和密码并进行认证。要使用的HTTP方法是POST,因此没有缓存。此外,在传输时还会有安全SSL < li >在认证时,将创建两个JWTs访问令牌和刷新令牌。刷新令牌将具有更长的有效期。这两个令牌都将写入coo

  • 我有麻烦让我的数据库连接到WAMP。我做这件事已经有5年了,所以我有点生疏了。我将我的Mysql升级到8.0时遇到了这个错误 我刷新了我的特权,并将插件更改为本机的根。在这一点上我被难倒了。有人能帮帮我吗? 下面是我的数据库类,直到第37行 /** > class Database*/class Database{ 专用$IP、$username、$password、$database; /**