springmvc+shiro+maven 实现登录认证与权限授权管理

接下来我将为您详细讲解“springmvc+shiro+maven 实现登录认证与权限授权管理”的完整攻略。

1. 环境准备

首先需要搭建好SpringMVC和Maven的环境,可使用IDEA等开发工具自行创建空白项目。

2. pom.xml配置

为项目引入SpringMVC和Shiro的依赖包,具体如下:

<!--SpringMVC依赖包-->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.3.10</version>
</dependency>

<!-- Shiro依赖包 -->
<dependency>
  <groupId>org.apache.shiro</groupId>
  <artifactId>shiro-web</artifactId>
  <version>1.7.1</version>
</dependency>
<dependency>
  <groupId>org.apache.shiro</groupId>
  <artifactId>shiro-spring</artifactId>
  <version>1.7.1</version>
</dependency>

3.配置Shiro

在SpringMVC的Web.xml配置文件中添加Shiro的Filter:

<filter>
  <filter-name>ShiroFilter</filter-name>
  <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>ShiroFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

然后在SpringMVC的applicationContext.xml中配置Shiro的相关bean:

<!-- Shiro的安全管理器 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
  <property name="realm" ref="myRealm"/>
</bean>

<!-- 自定义的Realm -->
<bean id="myRealm" class="com.example.MyRealm"/>

<!-- Shiro的过滤器链 -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
  <property name="securityManager" ref="securityManager"/>
  <property name="loginUrl" value="/login"/>
  <property name="successUrl" value="/index"/>
  <property name="unauthorizedUrl" value="/unauthorized"/>
  <property name="filterChainDefinitions">
    <value>
      /login = anon
      /static/** = anon
      /** = authc
    </value>
  </property>
</bean>

其中,myRealm是自定义的Realm实现认证和权限授权逻辑。filterChainDefinitions定义了Shiro的URL过滤器链,其中login、static目录下的静态文件等不需要认证,其余URL都需要进行认证和权限授权。

4. 自定义Realm

自定义Realm需要继承org.apache.shiro.realm.AuthorizingRealm类,并实现doGetAuthorizationInfo和doGetAuthenticationInfo两个方法实现权限授权和认证逻辑。示例代码如下:

public class MyRealm extends AuthorizingRealm {
    /**
     * 授权逻辑
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
        String username = (String) principalCollection.getPrimaryPrincipal();
        if ("admin".equals(username)) {
            authorizationInfo.addRole("admin");
            authorizationInfo.addStringPermission("user:query");
            authorizationInfo.addStringPermission("user:add");
            authorizationInfo.addStringPermission("user:delete");
            authorizationInfo.addStringPermission("user:update");
        } else if ("user".equals(username)) {
            authorizationInfo.addRole("user");
            authorizationInfo.addStringPermission("user:query");
        }
        return authorizationInfo;
    }

    /**
     * 认证逻辑
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        //获取用户输入的账号和密码
        String username = (String) authenticationToken.getPrincipal();
        String password = new String((char[]) authenticationToken.getCredentials());

        if("admin".equals(username) && "123456".equals(password)){
            return new SimpleAuthenticationInfo(username, password, getName());
        }else if("user".equals(username) && "123456".equals(password)){
            return new SimpleAuthenticationInfo(username, password, getName());
        }
        throw new AuthenticationException("账号或密码错误");
    }
}

5. 编写登录页面

登录页面的代码如下示例,其中包含了用户名、密码、记住我等表单元素:

<form class="form-signin" method="post" action="${pageContext.request.contextPath}/login">
    <h2 class="form-signin-heading">请登录</h2>
    <label for="inputEmail" class="sr-only">用户名</label>
    <input type="text" id="inputEmail" name="username" class="form-control" placeholder="请输入用户名" required autofocus>
    <label for="inputPassword" class="sr-only">密码</label>
    <input type="password" id="inputPassword" name="password" class="form-control" placeholder="请输入密码" required>
    <div class="checkbox">
        <label>
            <input type="checkbox" name="rememberMe" value="true"> 记住我
        </label>
    </div>
    <button class="btn btn-lg btn-primary btn-block" type="submit">登录</button>
</form>

6. 编写用户中心页面

用户中心页面包含了查询、添加、修改、删除等权限授权功能。示例代码如下:

<a href="${pageContext.request.contextPath}/user/query">查询用户</a>
<a href="${pageContext.request.contextPath}/user/add">添加用户</a>
<a href="${pageContext.request.contextPath}/user/update">修改用户</a>
<a href="${pageContext.request.contextPath}/user/delete">删除用户</a>

7. 编写相应的Controller

编写相应的Controller,具体的控制逻辑由Shiro和自定义的Realm来完成,Controller仅仅负责路由。示例代码如下:

@Controller
public class UserController {
    @RequestMapping("/user/query")
    public String query() {
        return "user/query";
    }

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

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

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

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

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

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

以上就是整个“springmvc+shiro+maven 实现登录认证与权限授权管理”的完整攻略。如果您需要了解更多相关的内容,可以在代码中添加相应的注释,或者查看相关的官方文档和教程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springmvc+shiro+maven 实现登录认证与权限授权管理 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 基于Java方式实现数据同步

    前言 在本文中,我们将介绍如何使用Java实现数据同步的基本原理以及如何实际地应用它。本文将包含两个步骤:首先我们将使用Java编写多线程程序从一个数据库中读取数据,并将其插入到另一个数据库中,以实现数据同步的基本原理。然后我们将使用示例说明如何使用这种方式实现两个不同数据库之间的数据同步。 数据同步的基本原理 实现数据同步的基本原理是通过编写一个程序来自动…

    Java 2023年5月18日
    00
  • java开发SSM框架具有rest风格的SpringMVC

    Java开发SSM框架具有REST风格的SpringMVC 在 Java 开发中,SSM 框架是一种常用的 Web 开发框架,它由 Spring、SpringMVC 和 MyBatis 三个框架组成。其中,SpringMVC 是用于处理 Web 请求的框架,支持 REST 风格的 Web 服务。本文将详细讲解如何在 SSM 框架中使用 SpringMVC 实…

    Java 2023年5月18日
    00
  • Ubuntu 使用Jni开发实例详解

    Ubuntu 使用 JNI 开发实例详解 什么是 JNI JNI (Java Native Interface)是一种编程桥梁,可用于在 Java 程序和本机代码之间执行互操作。通过 JNI,Java 应用程序可以调用本地函数和本地动态库,也可以使用 Java 调用 Java 以外的本地方法。 常见的用例包括: 在 Java 程序中调用 C 或 C++ 实现…

    Java 2023年5月26日
    00
  • Spring Cloud 配置中心内容加密的配置方法

    下面是Spring Cloud中配置中心内容加密的配置方法的完整攻略。 1. 加密配置信息 首先,我们需要在配置中心中加密敏感信息,并把加密后的密文保存在Git仓库中,例如: spring.datasource.password={cipher}EncryptedPassword 其中,{cipher}指定了使用加密算法,EncryptedPassword是…

    Java 2023年5月20日
    00
  • 浅析Java 常用的 4 种加密方式(MD5+Base64+SHA+BCrypt)

    浅析Java 常用的 4 种加密方式(MD5+Base64+SHA+BCrypt) MD5加密 MD5算法是一种散列函数,可以将任意长度的数据转化成一定长的散列值。通常用于密码加密。使用Java自带包java.security.MessageDigest中的getInstance(“MD5”)方法获取MD5的实例,加密方式如下: import java.se…

    Java 2023年6月3日
    00
  • 常见的Java类加载器有哪些?

    我来为你详细讲解一下Java类加载器。 Java类加载器 在Java中,类加载器是用于加载Java类和资源的特殊Java类。Java虚拟机通过它们来动态地加载Java类。Java类加载器是Java技术的核心组成部分,因为它使 Java 的动态实现成为可能。 Java 类加载器是类 Java.lang.ClassLoader 的实例,它负责将类的字节码从文件系…

    Java 2023年5月11日
    00
  • Spring Security权限控制的实现接口

    Spring Security是一个基于Spring框架的安全框架,用于实现用户认证(authentication)和授权(authorization)等安全功能。其中,权限控制是Spring Security的一个重要特性,可以通过编写实现接口来对系统中不同的资源进行授权控制。下面是完整的Spring Security权限控制实现接口攻略: 一、Sprin…

    Java 2023年6月3日
    00
  • 一篇文章带你了解Java基础-多态

    一篇文章带你了解Java基础-多态 前言 多态是Java中一个比较重要的概念,也是Java语言中的一种基本特征。掌握好多态,可以写出更加优雅、灵活、可扩展的代码。本文将从多态的概念入手,介绍Java中的多态,帮助大家更好地学习和使用Java语言。 什么是多态 多态是指同一对象在不同情况下有不同的表现形式,即同一种行为具有不同的表现形式和状态。在Java语言中…

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