基于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日

相关文章

  • 使用java处理字符串公式运算的方法

    处理字符串公式运算是开发中常见的问题之一。Java提供了一些库和方法来解决这个问题,下面将详细阐述处理字符串公式运算的方法。 1. 使用JavaScript引擎 Java中可以使用JavaScript引擎来处理字符串公式运算。具体步骤如下: 1.1 引入JavaScript引擎 使用以下代码来引入JavaScript引擎: import javax.scri…

    Java 2023年5月27日
    00
  • SpringBoot多数据源的两种实现方式实例

    下面我就为你详细讲解一下“SpringBoot多数据源的两种实现方式实例”的完整攻略。 SpringBoot多数据源的两种实现方式实例 为什么需要多数据源 在实际开发中,我们可能会遇到这样的情况:业务系统需要同时连接多个数据库进行数据操作。此时单数据源的方式已无法满足需求,必须使用多数据源来进行解决。 方案一:使用@Primary注解 1.添加多数据源配置项…

    Java 2023年5月20日
    00
  • layui之数据表格–与后台交互获取数据的方法

    首先,需要在后台构建好返回数据的接口,即后台返回数据应该是一个符合layui表格规范的JSON格式数据。 接下来的步骤是: 引入layui库 在前端页面中,需要引入layui库,以便能够正常使用 layui 提供的数据表格组件。 <!– 引入 layui 相关静态资源 –> <link rel="stylesheet&quot…

    Java 2023年6月15日
    00
  • SpringBoot使用token简单鉴权的具体实现方法

    一、Token简单鉴权的原理 Token鉴权是一种前后端分离的权限验证方式,具体的原理如下: 用户登录时请求后端API,后端验证用户名和密码是否正确,如果正确,将返回一个Token给前端。 前端将Token保存在本地(通常是localStorage或sessionStorage),后续请求时需要将Token附带在请求头中发送给后端。 后端验证请求头中的Tok…

    Java 2023年5月20日
    00
  • 使用SpringDataJpa创建中间表

    创建中间表是数据库设计中比较常见的操作,通常用于多对多关系的表之间,下面将介绍使用SpringDataJpa来创建中间表的完整攻略及示例。 1. 创建实体类和对应的Repository类 首先,需要创建两个实体类来代表多对多关系中的两个表,并在这两个实体类的@Repository注解中使用@RestController注解(或其他泛型注解)来继承Spring…

    Java 2023年5月20日
    00
  • Mybatis 条件查询 批量增删改查功能

    为了更好地回答这个问题,需要详细讲解Mybatis的条件查询和批量操作功能,这里分为以下几个部分进行讲解: Mybatis条件查询 Mybatis批量操作 Mybatis条件查询和批量操作的示例 1. Mybatis条件查询 Mybatis条件查询使用的是Mapper接口中的查询方法,这些查询方法在XML映射文件中对应一条SQL查询语句。Mybatis支持基…

    Java 2023年5月20日
    00
  • java的正则表达式你知道多少

    Java的正则表达式攻略 什么是正则表达式? 正则表达式是一种用来描述一种特定模式的语法规则,通过这种语法规则,我们能够快速地从文本中提取出我们需要的信息。 在Java中,我们通常使用的是java.util.regex包提供的正则表达式库来操作正则表达式。 正则表达式语法 在Java的正则表达式中,有很多的语法。其中,一些常用的语法包括: .:匹配任意字符,…

    Java 2023年5月27日
    00
  • 浅谈Java抽象类和接口的个人理解

    浅谈Java抽象类和接口的个人理解 Java是一门面向对象编程语言,面向对象编程的三大特性是封装、继承和多态。抽象类和接口都是Java中体现多态的机制。 抽象类 抽象类是不能被实例化的类,它通常被用于抽象出多个类中的共性并定义出它们的方法名、参数列表、返回类型和访问类型,由其子类来实现这些方法。 抽象类的定义方式为: public abstract clas…

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