SpringBoot Shiro Jwt 实现登录认证,代码分析

 
更多

引言

在现代Web应用程序中,用户认证是一个基本的需求。SpringBoot是一个非常流行的Java后端框架,而Shiro是一个功能强大的身份验证和授权框架。本文将介绍如何结合使用SpringBoot和Shiro来实现用户的登录认证,并使用Jwt(Json Web Token)进行身份验证。

准备工作

首先,在开始之前,你需要确保具备以下环境:

  • JDK 1.8及以上版本
  • Maven 3.0及以上版本
  • IntelliJ IDEA 或者其他Java IDE

导入依赖

在SpringBoot中使用Shiro和Jwt,我们需要添加相应的依赖。打开你的项目的pom.xml文件,在dependencies标签中添加以下依赖:

<dependencies>
    <!-- SpringBoot依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Shiro依赖 -->
    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-spring-boot-starter</artifactId>
        <version>1.7.0</version>
    </dependency>

    <!-- Jwt依赖 -->
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>0.9.1</version>
    </dependency>
</dependencies>

配置Shiro

在SpringBoot中,我们可以使用@Configuration注解来配置Shiro。创建一个名为ShiroConfig的类,并在类上添加@Configuration注解。

首先,我们需要配置一个RealmRealm是Shiro中负责验证用户身份的部分,我们可以自定义一个Realm来实现对用户的验证。创建一个名为ShiroRealm的类,继承AuthorizingRealm

public class ShiroRealm extends AuthorizingRealm {
    // 实现认证逻辑和授权逻辑
}

然后,我们需要配置Shiro的安全管理器。创建一个名为SecurityManagerConfig的类,继承WebSecurityManager

public class SecurityManagerConfig extends WebSecurityManager {
    // 配置安全管理器
}

最后,在ShiroConfig中,我们需要将ShiroRealmSecurityManagerConfig配置为Shiro的一部分。我们还可以配置一些其他的Shiro属性,如登录页面、登录成功后跳转的页面等。

@Configuration
public class ShiroConfig {
    // 配置Shiro的各种属性
}

用户登录认证

接下来,我们可以开始实现用户的登录认证了。首先,在ShiroRealm中,我们需要重写doCredentialsMatch方法来验证用户的用户名和密码是否匹配。

public class ShiroRealm extends AuthorizingRealm {
    @Override
    protected boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
        UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) token;
        String username = usernamePasswordToken.getUsername();
        String password = new String((char[]) usernamePasswordToken.getCredentials());
        // 验证用户名和密码是否匹配
        return false;
    }
}

然后,在SecurityManagerConfig中,我们需要配置ShiroRealm,将其注入到Shiro的安全管理器中。

public class SecurityManagerConfig extends WebSecurityManager {
    @Autowired
    private ShiroRealm shiroRealm;

    @PostConstruct
    public void init() {
        setRealm(shiroRealm);
    }
}

最后,在ShiroConfig中,我们需要配置登录接口。创建一个名为LoginController的类,并添加一个login方法,用于处理用户的登录请求。

@RestController
public class LoginController {
    @PostMapping("/login")
    public String login(@RequestBody Map<String, String> requestBody) {
        String username = requestBody.get("username");
        String password = requestBody.get("password");
        // 验证用户名和密码是否正确
        return "success";
    }
}

Jwt身份验证

一旦用户登录成功,我们可以为用户生成一个Jwt来标识用户的身份。创建一个名为JwtUtil的类,用于生成和验证Jwt。

public class JwtUtil {
    // 生成Jwt
    public static String generateJwt(String subject, long expireTime, String secret) {
        // 生成Jwt
        return "";
    }

    // 验证Jwt
    public static boolean validateJwt(String jwt, String secret) {
        // 验证Jwt是否有效
        return false;
    }
}

然后,在LoginControllerlogin方法中,登录成功后可以调用JwtUtil.generateJwt方法来生成Jwt,并返回给用户。

@RestController
public class LoginController {
    @PostMapping("/login")
    public String login(@RequestBody Map<String, String> requestBody) {
        String username = requestBody.get("username");
        String password = requestBody.get("password");
        // 验证用户名和密码是否正确

        // 生成Jwt
        String jwt = JwtUtil.generateJwt(username, 3600, "secret");
        return jwt;
    }
}

最后,在其他需要身份验证的接口中,可以通过@RequestHeader注解来获取并验证Jwt。

@RestController
public class UserController {
    @GetMapping("/user")
    public String getUser(@RequestHeader("Authorization") String jwt) {
        // 验证Jwt是否有效
        JwtUtil.validateJwt(jwt, "secret");

        // 获取用户信息
        return "User Info";
    }
}

总结

通过结合使用SpringBoot、Shiro和Jwt,我们可以实现一个安全的用户登录认证系统。Shiro提供了强大的身份验证和授权功能,而Jwt则提供了一种方便的方式来验证用户的身份。希望本文能够对你理解和使用SpringBoot、Shiro和Jwt有所帮助。

以上就是SpringBoot + Shiro + Jwt实现登录认证的代码分析。如果你对具体的代码实现以及更多细节感兴趣,可以阅读相关的文档和源代码。祝愿你在使用SpringBoot、Shiro和Jwt时取得成功!

打赏

本文固定链接: https://www.cxy163.net/archives/6944 | 绝缘体-小明哥的技术博客

该日志由 绝缘体.. 于 2022年06月03日 发表在 apache, java, spring, 后端框架, 开发工具, 编程语言 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: SpringBoot Shiro Jwt 实现登录认证,代码分析 | 绝缘体-小明哥的技术博客
关键字: , , , ,

SpringBoot Shiro Jwt 实现登录认证,代码分析:等您坐沙发呢!

发表评论


快捷键:Ctrl+Enter