基于spring boot 2和shiro实现身份验证案例

实现基于Spring Boot 2和Shiro的身份验证,可以按以下步骤进行:

步骤一:创建Spring Boot项目

使用Spring Initializr或者其他方式创建一个Spring Boot项目。

步骤二:添加Shiro依赖

在项目的pom.xml中添加Shiro的依赖:

<dependency>
  <groupId>org.apache.shiro</groupId>
  <artifactId>shiro-spring-boot-starter</artifactId>
  <version>1.5.3</version>
</dependency>

步骤三:配置Shiro

在配置类中创建ShiroFilterFactoryBean和SecurityManager的bean:

@Configuration
public class ShiroConfig {
    @Bean
    ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        shiroFilterFactoryBean.setSecurityManager(securityManager);
        shiroFilterFactoryBean.setLoginUrl("/login.html");
        shiroFilterFactoryBean.setUnauthorizedUrl("/unauthorized.html");

        Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
        filterChainDefinitionMap.put("/logout", "logout");
        filterChainDefinitionMap.put("/login", "anon");
        filterChainDefinitionMap.put("/**", "authc");
        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);

        return shiroFilterFactoryBean;
    }

    @Bean
    SecurityManager securityManager() {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        securityManager.setRealm(realm());
        return securityManager;
    }

    @Bean
    Realm realm() {
        CustomRealm realm = new CustomRealm();
        return realm;
    }
}

这里的CustomRealm需要自己实现,继承AuthorizingRealm,然后实现doGetAuthorizationInfo和doGetAuthenticationInfo。

步骤四:编写登录和退出

登录和退出可以参考以下示例:

@Controller
public class LoginController {

    @RequestMapping("/login")
    public String login() {
        return "login";
    }

    @RequestMapping("/doLogin")
    @ResponseBody
    public String doLogin(String username, String password) {
        Subject subject = SecurityUtils.getSubject();
        UsernamePasswordToken token = new UsernamePasswordToken(username, password);
        try {
            subject.login(token);
        } catch (UnknownAccountException e) {
            return "用户名不存在";
        } catch (IncorrectCredentialsException e) {
            return "密码不正确";
        }
        return "登录成功";
    }

    @RequestMapping("/logout")
    public String logout() {
        Subject subject = SecurityUtils.getSubject();
        if (subject.isAuthenticated()) {
            subject.logout();
        }
        return "redirect:/login";
    }
}

步骤五:编写html

可以参考以下的登录和退出html:

<!DOCTYPE html>
<html>
<head>
    <title>登录</title>
</head>
<body>
    <form action="doLogin" method="POST">
        <div>
            <label>用户名:</label>
            <input type="text" name="username"/>
        </div>
        <div>
            <label>密码:</label>
            <input type="password" name="password"/>
        </div>
        <div>
            <input type="submit" value="登录"/>
        </div>
    </form>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
    <title>退出</title>
</head>
<body>
    <form id="logout-form" action="#" method="POST">
        <input type="hidden" name="_csrf" value="${_csrf.token}"/>
        <input type="submit" value="退出"/>
    </form>
    <script src="/js/jquery.min.js"></script>
    <script>
        $(function() {
            $("#logout-form").submit(function() {
                $.ajax({
                    url: "/logout",
                    type: "POST",
                    success: function() {
                        location.href = "/login.html";
                    }
                });
                return false;
            });
        });
    </script>
</body>
</html>

以上就是利用Spring Boot 2和Shiro实现身份验证的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于spring boot 2和shiro实现身份验证案例 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Springboot引入hibernate配置自动建表并进行增删改查操作

    下面是详细的步骤: 1. 添加依赖 在pom.xml文件中添加以下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> &l…

    Java 2023年5月19日
    00
  • 详解Spring boot操作文件的多种方式

    详解Spring Boot操作文件的多种方式 在Spring Boot应用程序中,操作文件是一个非常常见的需求。本文将详细介绍Spring Boot操作文件的多种方式,包括使用Java IO、Apache Commons IO、Spring Framework和Spring Boot提供的API。 使用Java IO操作文件 Java IO是Java标准库中…

    Java 2023年5月15日
    00
  • 详解JAVA 字节流和字符流

    详解JAVA 字节流和字符流 在JAVA中,流是指一种数据传输方式,可以从一个地方读入数据并传输到另一个地方,或者从一个地方写数据到另一个地方。在JAVA中,根据数据类型的不同,流分为字节流和字符流两种类型。本文将详细讲解JAVA 字节流和字符流的特点,使用场景以及相关常用类的详细使用方法。 字节流与字符流 字节流 JAVA中的字节流,是用于处理字节数据的I…

    Java 2023年5月26日
    00
  • Spring boot中使用Spring-data-jpa方便快捷的访问数据库(推荐)

    使用Spring Boot和Spring Data JPA,可以方便地进行数据库访问,减少了繁琐的配置和代码编写,使开发变得更加简单和高效。 下面是使用Spring Boot和Spring Data JPA的完整攻略,包含两个示例。 1.引入依赖和配置 首先需要在项目的pom.xml文件中添加Spring Data JPA和数据库驱动的依赖。 <dep…

    Java 2023年5月20日
    00
  • spring boot 结合jsp案例详解

    下面我来详细讲解“Spring Boot 结合 JSP 案例详解”的完整攻略。 一、什么是 Spring Boot 结合 JSP Spring Boot 是一个快速构建 Spring 应用程序的工具。它可以减少 Spring 应用程序开发的时间和努力,因为它提供了各种默认配置,可以轻松地开始使用 Spring 应用程序的开发。 JSP(JavaServer …

    Java 2023年6月15日
    00
  • Java Web开发环境配置详解

    Java Web开发环境配置详解 简介 本文旨在为Java开发者提供一个完整的Java Web开发环境的配置攻略,包括Java JDK、Eclipse IDE、Tomcat服务器和Maven项目管理工具的安装和配置,并提供两个示例来演示如何使用配置好的环境来进行Java Web开发。 Java JDK安装与配置 下载并安装Java JDK。在Oracle官网…

    Java 2023年5月19日
    00
  • jsp实现局部刷新页面、异步加载页面的方法

    让我来为您详细讲解一下“JSP实现局部刷新页面、异步加载页面的方法”的完整攻略。 前言 JSP(Java Server Pages)是一种基于Java技术的Web开发技术,它允许开发人员在HTML标签中包含Java代码,并通过编译器将其转换为Java Servlet。JSP通常与MVC(Model-View-Controller)设计模式一起使用,它允许开发…

    Java 2023年6月15日
    00
  • Java异常(Exception)处理以及常见异常总结

    关于Java异常处理以及常见异常总结的攻略共分为以下几个部分: 异常概念 Java异常分类 异常处理 常见异常总结 示例说明 1. 异常概念 Java异常是在程序执行期间出现的错误或异常情况。异常在程序执行过程中会中断程序的正常执行,并且在出现问题的位置抛出异常信息。一个方法如果没有特殊处理异常的机制,当出现异常时会使程序崩溃。 2. Java异常分类 Ja…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部