返回

用插件的方式将shiro嵌入到jfinal项目中,入门只需几步

后端

如何将 Shiro 集成到 JFinal 项目中:分步指南

在 Java Web 开发领域,JFinal 框架以其轻量、高效和简洁而著称。当您需要增强 JFinal 项目的安全功能时,Shiro 框架便闪亮登场,为您的项目提供强大的认证、授权和会话管理能力。本文将引导您一步步完成将 Shiro 集成到 JFinal 项目中的过程。

先决条件

在继续之前,确保您已准备好以下环境:

  • JFinal 版本 3.6 或更高
  • Shiro 版本 1.4 或更高

安装 JFinal-Shiro 插件

首先,您需要安装 jfinal-shiro-plugin 插件。您可以从 JFinal 官方网站下载插件或使用以下 Maven 命令进行安装:

mvn install:install-file -DgroupId=com.jfinal -DartifactId=jfinal-shiro-plugin -Dversion=2.5.1 -Dpackaging=jar

配置插件

在您的 JFinal 项目中,编辑 build.gradle 文件并添加以下依赖:

dependencies {
    compile 'com.jfinal:jfinal-shiro-plugin:2.5.1'
}

然后,在 src/main/java/com/jfinal/config 目录下创建一个名为 ShiroConfig.java 的文件。这是您将配置 Shiro 的地方:

import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.core.JFinal;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.plugin.ehcache.EhCachePlugin;
import com.jfinal.plugin.shiro.ShiroPlugin;

public class ShiroConfig extends JFinalConfig {

    @Override
    public void configConstant(Constants me) {
        PropKit.use("shiro.properties");
    }

    @Override
    public void configRoute(Routes me) {
        me.add("/", IndexController.class, "/");
        me.add("/user", UserController.class, "/user");
    }

    @Override
    public void configPlugin(Plugins me) {
        DruidPlugin druidPlugin = new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim());
        me.add(druidPlugin);

        ActiveRecordPlugin activeRecordPlugin = new ActiveRecordPlugin(druidPlugin);
        me.add(activeRecordPlugin);

        EhCachePlugin ehCachePlugin = new EhCachePlugin();
        me.add(ehCachePlugin);

        ShiroPlugin shiroPlugin = new ShiroPlugin(this);
        me.add(shiroPlugin);
    }

    @Override
    public void configInterceptor(Interceptors me) {

    }

    @Override
    public void configHandler(Handlers me) {

    }

    public static void main(String[] args) {
        JFinal.start("src/main/webapp", 8080, "/", 5);
    }
}

使用注解进行权限控制

在控制器中使用注解来定义权限要求:

import com.jfinal.aop.Before;
import com.jfinal.core.Controller;

public class UserController extends Controller {

    @Before(ShiroInterceptor.class)
    public void index() {
        renderText("Hello, world!");
    }

    @Before(ShiroInterceptor.class)
    public void save() {
        renderText("Save user!");
    }

    @Before(ShiroInterceptor.class)
    public void update() {
        renderText("Update user!");
    }

    @Before(ShiroInterceptor.class)
    public void delete() {
        renderText("Delete user!");
    }
}

配置权限规则

shiro.properties 配置文件中定义权限规则:

[users]
admin=123456
user=111111

[roles]
admin=admin,user
user=user

[permissions]
/user/*=admin
/user/save=admin,user
/user/update=admin
/user/delete=admin

结论

通过集成 Shiro,您已将强大的安全功能添加到您的 JFinal 项目中。这将使您能够轻松控制对控制器方法的访问,防止未经授权的访问并保护您的应用程序免受安全威胁。

常见问题解答

  • 我应该在哪里放置 shiro.properties 文件?
    将文件放在 JFinal 项目的 src/main/resources 目录中。
  • 如何自定义 Shiro 拦截器?
    您可以在 ShiroConfig.java 类的 configPlugin 方法中配置 Shiro 拦截器。
  • 我可以使用 Shiro 注解在模型上定义权限吗?
    是的,可以使用 @RequiresPermissions 注解在模型类的方法上定义权限。
  • 如何使用 Shiro 进行记住我功能?
    您需要在 shiro.properties 文件中配置记住我功能,并使用 @RememberMe 注解在控制器方法上启用它。
  • 如何使用 Shiro 进行会话管理?
    Shiro 提供了 SessionManager 接口,您可以使用它来管理会话状态。