web项目总免不了用户的管理与注册,需求稍微再多一点儿,就涉及用户的角色及权限管理了,下面根据自己项目的实际经验,介绍如何在Jfinal项目中使用Shiro来进行简单的登陆及权限管理。
主角简介
- Jfinal 位居开源中国年度热门开源项目前列,简单好用快速的java web开发框架,用过就知道。
- Shiro Apache基金会顶级项目,所以你懂得。java安全框架里的主流选择,号称相当简单,但是我至今其实对一些概念还稀里糊涂,所以本文也只记录使用,不做原理概念分析,入门参见教程
使用
1 方案选择
根据项目需求设计角色及权限管理方案,我用到的几乎是最简单的了,如下图所示:
2 引入shiro
- 添加
shiro-core-1.2.4.jar
和shiro-web-1.2.4.jar
至项目WEB-INF/lib
目录下,同时确保shiro的依赖jar:slf4j,commons-beanutils,commons-logging
也位于该目录下(maven直接pom添加上面两个shiro的依赖就好)。 - 添加Jfinal shiro插件
jfinal-shiro-2.0.0.jar
到该目录下。
3 DefaultConfig.java
DefaultConfig.java
中的public void configConstant(Constants me)
方法中加入401与403错误代码处理(可选)。
//RequiresGuest,RequiresAuthentication,RequiresUser验证异常,返回HTTP401状态码
me.setErrorView(401, "/login.html");
//RequiresRoles,RequiresPermissions授权异常,返回HTTP403状态码
me.setErrorView(403, "/login.html");
class DefaultConfig
加一个成员变量
public class DefaultConfig extends JFinalConfig {
/**
* 供Shiro插件使用。
*/
Routes routes;
public void configRoute(Routes me)
方法中加入:
public void configRoute(Routes me) {
this.routes = me;
me.add(...)
...
public void configPlugin(Plugins me)
方法最后加入:
public void configPlugin(Plugins me) {
...//other plugins
ShiroPlugin shiroPlugin = new ShiroPlugin(this.routes);
shiroPlugin.setLoginUrl("/login.do");//登陆url:未验证成功跳转
s