当前位置:首页 > Java

java如何使用shiro

2026-03-22 09:03:15Java

使用 Apache Shiro 进行 Java 应用安全控制

Apache Shiro 是一个强大且易用的 Java 安全框架,用于身份验证、授权、加密和会话管理。以下是集成 Shiro 到 Java 应用的主要步骤:

添加 Shiro 依赖

在 Maven 项目中,添加以下依赖到 pom.xml

<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-core</artifactId>
    <version>1.12.0</version>
</dependency>
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-web</artifactId>
    <version>1.12.0</version>
</dependency>

配置 Shiro 安全管理器

创建 shiro.ini 配置文件(或通过代码配置),定义用户、角色和权限:

[users]
admin = password, admin
user = password, user

[roles]
admin = *
user = read:*

在 Java 代码中初始化 SecurityManager

Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);

实现身份验证

通过 Subject 进行用户登录验证:

Subject currentUser = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("admin", "password");

try {
    currentUser.login(token); // 登录验证
    System.out.println("登录成功");
} catch (AuthenticationException e) {
    System.out.println("登录失败: " + e.getMessage());
}

授权检查

检查用户权限或角色:

if (currentUser.hasRole("admin")) {
    System.out.println("拥有 admin 角色");
}

if (currentUser.isPermitted("read:data")) {
    System.out.println("拥有 read:data 权限");
}

集成到 Web 应用

web.xml 中配置 Shiro 过滤器:

<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>

shiro.ini 中定义 URL 权限规则:

[urls]
/login = anon
/admin/ = authc, roles[admin]
/user/ = authc, roles[user]

自定义 Realm

扩展 AuthorizingRealm 实现自定义数据源(如数据库):

public class CustomRealm extends AuthorizingRealm {
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
        info.addRole("admin"); // 从数据库加载角色
        info.addStringPermission("read:data"); // 从数据库加载权限
        return info;
    }

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) {
        String username = (String) token.getPrincipal();
        String password = new String((char[]) token.getCredentials());
        // 验证用户名和密码(如查询数据库)
        return new SimpleAuthenticationInfo(username, password, getName());
    }
}

注册自定义 Realm 到 SecurityManager

DefaultSecurityManager securityManager = new DefaultSecurityManager();
securityManager.setRealm(new CustomRealm());
SecurityUtils.setSecurityManager(securityManager);

会话管理

Shiro 提供统一的会话 API,支持 Web 和非 Web 环境:

java如何使用shiro

Session session = currentUser.getSession();
session.setAttribute("key", "value");
String value = (String) session.getAttribute("key");

通过以上步骤,可以快速集成 Shiro 实现 Java 应用的安全控制。根据需求扩展 Realm 或配置更复杂的权限规则。

分享给朋友:

相关文章

如何使用java

如何使用java

安装Java开发环境 下载并安装Java Development Kit(JDK),推荐从Oracle官网或OpenJDK获取最新版本。安装完成后配置环境变量,确保JAVA_HOME指向JDK安装路径…

java如何编程

java如何编程

Java编程基础 Java是一种面向对象的编程语言,广泛应用于企业级开发、移动应用(Android)等领域。以下是Java编程的核心步骤和示例。 环境搭建 安装JDK 从Oracle官网下载适合…

如何学习java

如何学习java

学习Java的步骤 理解基础知识 从Java的基本语法开始,包括变量、数据类型、运算符、控制流(if-else、循环)等。掌握这些基础概念是后续学习的基石。 学习面向对象编程(OOP) Java是一…

react如何使用路由

react如何使用路由

使用 React Router 的基本方法 React Router 是 React 应用中实现路由功能的核心库。以下是基本使用方法: 安装 React Router 依赖包: npm insta…

如何运行java文件

如何运行java文件

运行Java文件的方法 确保已安装Java Development Kit (JDK),可通过命令行输入java -version和javac -version验证安装。 编写Java代码并保存为.…

java如何处理高并发

java如何处理高并发

Java处理高并发的方法 使用多线程和线程池 Java的java.util.concurrent包提供了线程池(如ThreadPoolExecutor)和并发工具类(如CountDownLatch、C…