jsp 语言 JSP 使用 Shiro 实现角色管理

JSP阿木 发布于 2025-07-02 15 次阅读


使用 Shiro 实现角色管理在 JSP 中的应用

Shiro 是一个开源的安全框架,用于简化企业级应用中的用户认证、授权、会话和加密问题。在 Java Web 开发中,JSP(JavaServer Pages)是一种常用的技术,用于创建动态网页。本文将围绕 JSP 语言,结合 Shiro 框架,探讨如何实现角色管理功能。

环境准备

在开始之前,我们需要准备以下环境:

1. Java 开发环境(如 JDK 1.8+)

2. Web 服务器(如 Apache Tomcat 9+)

3. Shiro 框架(可以从官网下载或使用 Maven 依赖)

Shiro 简介

Shiro 提供了以下核心功能:

1. Authentication(认证):用户身份验证,确定用户是否为系统所信任。

2. Authorization(授权):基于角色的访问控制,确定用户是否有权限访问某个资源。

3. Session Management(会话管理):管理用户会话,包括创建、验证、终止等。

4. Cryptography(加密):提供数据加密和校验功能。

JSP 与 Shiro 集成

1. 添加 Shiro 依赖

在 Maven 项目中,添加以下依赖:

xml

<dependency>


<groupId>org.apache.shiro</groupId>


<artifactId>shiro-web</artifactId>


<version>1.4.0</version>


</dependency>


2. 配置 Shiro

在 `web.xml` 文件中配置 Shiro 过滤器:

xml

<filter>


<filter-name>shiroFilter</filter-name>


<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>


<init-param>


<param-name>loginUrl</param-name>


<param-value>/login.jsp</param-value>


</init-param>


<init-param>


<param-name>unauthorizedUrl</param-name>


<param-value>/unauthorized.jsp</param-value>


</init-param>


</filter>


<filter-mapping>


<filter-name>shiroFilter</filter-name>


<url-pattern>/</url-pattern>


</filter-mapping>


3. 创建 Shiro 配置文件

创建 `shiro.ini` 文件,配置用户、角色和权限:

ini

[users]


user1 = password1, role1, role2


user2 = password2, role2

[roles]


role1 = permission1, permission2


role2 = permission3

[permissions]


permission1 = /user/, /admin/, /edit/, /delete/, /update/, /add


permission2 = /user/, /admin/, /view


permission3 = /user/, /admin/, /view


角色管理实现

1. 用户登录

创建 `login.jsp` 页面,用于用户登录:

jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>


<!DOCTYPE html>


<html>


<head>


<title>登录</title>


</head>


<body>


<form action="login" method="post">


用户名:<input type="text" name="username" /><br />


密码:<input type="password" name="password" /><br />


<input type="submit" value="登录" />


</form>


</body>


</html>


创建 `LoginController.java` 类,处理登录请求:

java

package com.example.controller;

import org.apache.shiro.SecurityUtils;


import org.apache.shiro.authc.UsernamePasswordToken;


import org.apache.shiro.subject.Subject;


import org.springframework.stereotype.Controller;


import org.springframework.web.bind.annotation.RequestMapping;

@Controller


public class LoginController {

@RequestMapping("/login")


public String login(String username, String password) {


UsernamePasswordToken token = new UsernamePasswordToken(username, password);


Subject subject = SecurityUtils.getSubject();


try {


subject.login(token);


return "redirect:/index.jsp";


} catch (Exception e) {


return "redirect:/login.jsp";


}


}


}


2. 角色权限控制

创建 `index.jsp` 页面,用于展示用户角色和权限:

jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>


<%@ page import="org.apache.shiro.SecurityUtils" %>


<!DOCTYPE html>


<html>


<head>


<title>首页</title>


</head>


<body>


<h1>欢迎,${sessionScope.user.username}!</h1>


<ul>


<li>角色:${sessionScope.user.roles}</li>


<li>权限:${sessionScope.user.permissions}</li>


</ul>


<a href="logout">退出</a>


</body>


</html>


创建 `LogoutController.java` 类,处理用户退出请求:

java

package com.example.controller;

import org.apache.shiro.SecurityUtils;


import org.apache.shiro.subject.Subject;


import org.springframework.stereotype.Controller;


import org.springframework.web.bind.annotation.RequestMapping;

@Controller


public class LogoutController {

@RequestMapping("/logout")


public String logout() {


Subject subject = SecurityUtils.getSubject();


subject.logout();


return "redirect:/login.jsp";


}


}


3. 未授权页面

创建 `unauthorized.jsp` 页面,用于展示未授权信息:

jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>


<!DOCTYPE html>


<html>


<head>


<title>未授权</title>


</head>


<body>


<h1>您没有权限访问该页面!</h1>


<a href="login.jsp">返回登录</a>


</body>


</html>


总结

本文介绍了如何使用 Shiro 框架在 JSP 中实现角色管理功能。通过配置 Shiro 过滤器、创建 Shiro 配置文件、编写登录、权限控制和退出逻辑,我们可以实现一个简单的角色管理功能。在实际项目中,可以根据需求进行扩展和优化。

注意:本文仅为示例,实际应用中需要根据项目需求进行调整。