当前位置:首页 > 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为扩展名的文件,例如HelloWorld.java。文件内容需包含一个类定义,类名必须与文件名一致。例如: public class HelloWorld {…

如何学java

如何学java

学习Java的基础知识 Java是一门面向对象的编程语言,掌握基础语法是入门的关键。需要了解变量、数据类型、运算符、控制结构(如if-else、for循环、while循环)、数组等概念。可以通过官方文…

如何配置java环境

如何配置java环境

下载JDK安装包 访问Oracle官网或OpenJDK官网,选择适合操作系统的JDK版本(如Windows、macOS或Linux)。下载完成后,运行安装程序并按照提示完成安装。 设置环境变量 右键…

如何编译java文件

如何编译java文件

安装JDK 确保系统已安装Java Development Kit(JDK)。可通过命令行输入 javac -version 和 java -version 验证。若未安装,需从Oracle或Open…

java如何配置环境变量

java如何配置环境变量

配置Java环境变量的方法 下载并安装JDK 从Oracle官网或OpenJDK下载适合操作系统的JDK安装包。运行安装程序并按照提示完成安装,记下JDK的安装路径(例如C:\Program File…

java如何处理高并发

java如何处理高并发

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