文档章节

JFinal+shiro整合及demo

罗曼蒂克瑟尔
 罗曼蒂克瑟尔
发布于 2015/12/25 16:42
字数 756
阅读 333
收藏 15
点赞 1
评论 0

  本次整合基于玛雅牛提供的方法,先看一下这个 http://my.oschina.net/myaniu/blog/137205

 1、顶一个routes成员变量,并配置一些常量。

public class MainConfig extends JFinalConfig {
    
     Routes routes;
    /**
     * 配置常量
     */
    public void configConstant(Constants me) {
        // 加载少量必要配置,随后可用PropKit.get(...)获取值
        PropKit.use("a_little_config.txt");
        me.setDevMode(PropKit.getBoolean("devMode", false));
        me.setViewType(ViewType.FREE_MARKER);
        me.setBaseViewPath("/WEB-INF/view/");
        
    }

2、配置路由,插件,拦截器

/**
     * 配置路由
     */
    public void configRoute(Routes me) {
        this.routes = me;
        me.add("/", IndexController.class);    // 第三个参数为该Controller的视图存放路径
        me.add("/login", LoginController.class,"/");            // 第三个参数省略时默认与第一个参数值相同,在此即为 "/login"
    }
    
    /**
     * 配置插件
     */
    public void configPlugin(Plugins me) {
        // 配置C3p0数据库连接池插件
        C3p0Plugin c3p0Plugin = new C3p0Plugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim());
        c3p0Plugin.setDriverClass("oracle.jdbc.driver.OracleDriver");
        me.add(c3p0Plugin);
        // 配置ActiveRecord插件
        ActiveRecordPlugin arp = new ActiveRecordPlugin(c3p0Plugin);
        me.add(arp);
        // 配置Postgresql方言 
        arp.setDialect(new OracleDialect());
        arp.setShowSql(true);
        arp.setContainerFactory(new CaseInsensitiveContainerFactory(true)); 
        arp.addMapping("test_user",User.class);    
        arp.addMapping("role","roleid",Role.class);    
        arp.addMapping("permission","perid",Permission.class);    
        arp.addMapping("menu","menuid",Menu.class);    
        arp.addMapping("user_role",UserRole.class);    
        arp.addMapping("role_permission",RolePermission.class);    
        arp.addMapping("role_menu",RoleMenu.class);    
        //加载Shiro插件
        //me.add(new ShiroPlugin(routes));
        ShiroPlugin shiroPlugin = new ShiroPlugin(this.routes);
        shiroPlugin.setLoginUrl("/login/");
        shiroPlugin.setSuccessUrl("/login/main/");
        shiroPlugin.setUnauthorizedUrl("/login/");
        me.add(shiroPlugin);   
    }
    /**
     * 配置全局拦截器
     */
    public void configInterceptor(Interceptors me) {
        //shiro 拦截器
         me.add(new ShiroInterceptor());
    }

3、实现一个realm,认证和授权的部分如下:

/*得到授权信息*/
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        /*用户的角色*/
        Set<String> roleNames = new HashSet<String>();
        /*用户的权限*/
        Set<String> permissions = new HashSet<String>();
        /*得到登陆用户的用户名*/
        String username = (String) principals.getPrimaryPrincipal();
        /*根据用户名得到用户*/
        User user=userservice.findUserByName(username);
    
        /*根据用户id得到角色*/
        Role role=roleservice.findRoleByUserId(user.getBigDecimal("id").intValue());
        /*根据角色id得到权限*/
        List<Permission> list= permissionservice.findAllPermByRoleid(role.getBigDecimal("roleid").intValue());
        for(Permission per:list){
            permissions.add(per.getStr("pername"));
        }
        roleNames.add(role.getStr("rolename"));
        /*授权信息,设置角色和权限*/
        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roleNames);
        info.setStringPermissions(permissions);
        return info;
    }
    
    /*认证用户名和密码是否符合登陆条件*/
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException {
        /* 这里编写认证代码 */
        UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
        /*根据用户名从数据库里查找用户*/
        User user = userservice.findUserByName(token.getUsername());
        
        /*查找到的用户与Token里面的用户进行比较  匹配则登陆成功,不匹配则登陆失败*/
        return new SimpleAuthenticationInfo(user.getStr("username"),
                user.getStr("password"), getName());
    }

4、配置shiro.ini文件 在WEB-IN路径下面:

[main]
#realm
myRealm = com.fpb.realm.MyRealm
securityManager.realm = $myRealm
authc=com.fpb.filter.MyAuthenticationFilter
authc.loginUrl = /login/
logout=com.fpb.filter.LogOutFilter
logout.redirectUrl = login.html

 
#cache
shiroCacheManager = org.apache.shiro.cache.ehcache.EhCacheManager
shiroCacheManager.cacheManagerConfigFile = classpath:ehcache-shiro.xml
securityManager.cacheManager = $shiroCacheManager
 
#session
sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO
sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
sessionDAO.activeSessionsCacheName = shiro-activeSessionCache
sessionManager.sessionDAO = $sessionDAO
securityManager.sessionManager = $sessionManager
securityManager.sessionManager.globalSessionTimeout = 360000
 
#这里的规则,web.xml中的配置的ShiroFilter会使用到。
[urls]
/login/=anon
/login.html=anon
/**=authc
/login/logout=logout

5、数据库配置文件a_little_config.txt:

jdbcUrl =jdbc:oracle:thin:@127.0.0.1 :1521:orcl
user = ***
password =***
devMode = true

6、登录方法:

public  UserService userservice=Duang.duang(UserService.class);

    public static final String LOGIN_FAIL_URL="login.html";
    public static final String LOGIN_SUCC_URL="main.html";
    public void index() {
        
        //3、得到Subject及创建用户名/密码身份验证Token(即用户身份/凭证)
       /* String username="admin";
        String password="111";*/
        String username=getPara("username");
        String password=getPara("password");

        Subject subject = SecurityUtils.getSubject();
        ThreadContext.bind(subject);
        UsernamePasswordToken token = new UsernamePasswordToken(username, password);
        
        try{
            subject.login(token);
            User user = userservice.findUserByName(token.getUsername());
            getSession().setAttribute("userInfo", user);
        }catch (Exception e) {
            getRequest().setAttribute("message", "账户密码不匹配!");
            render(LOGIN_FAIL_URL);
        }
        
      
    }

  7、项目整体的结构图:

这次就先贴上代码了  具体的流程就不多做介绍了,demo的链接地址如下:https://yunpan.cn/cujKdAjqWXKHL  访问密码 46be

© 著作权归作者所有

共有 人打赏支持
罗曼蒂克瑟尔
粉丝 4
博文 8
码字总数 6563
作品 0
昌平
程序员
求jfinal+shiro的demo

@JFinal 你好,想跟你请教个问题: 求jfinal+shiro的demo地址。。

lyleluo
2014/09/26
451
2
jfinal+shiro有哪位大侠实现了remember me功能

现在我这边开发基于jfinal+shiro的android手机端,想实现记住我的功能。这样用户只要不主动退出,以后进入android端就不需要再次登录了。但是记住我功能有点搞不定,有哪位大侠实现了并最好有...

hsongjiang1982
2015/04/10
493
2
jfinal shiro snaker quartz定时调用时发生的错误

@玛雅牛 你好,想跟你请教个问题: 我们的项目采用了jfinal+shiro,quartz来配置定时任务,snaker流程引擎。 其他的插件都是通过plugin的方式加载到jfinal,只有shiro通过filter配置而来。 使...

jiayaoyao
2016/12/02
387
3
kft-activiti-demo 1.13.0 发布,Activiti 快速入门 Demo

时隔一年再次更新,主要是针对Activiti 5.17+版本做了支持,自动初始化Demo数据等 Activiti Modeler从5.17开始结构和整合到项目的方式有些变化,另外官方Activiti Explorer整合的方式也有Spr...

咖啡兔
2015/11/25
1K
3
CSS Sprite(CSS贴图)

吐槽:oschina的markdown怎么这么丑? 我们经常看到这样的CSS描述: 其中的demo.png就是将多个小图像整合到一起的图片,目的是减少对资源请求次数。 那么怎么整和呢,除了图片处理的软件,这...

BlurNull
2016/02/24
53
0
Activiti快速入门项目 kft-activiti-demo 1.7.0 发布

本次更新包含一下特性: 升级Activiti版本为5.12 添加分页查询演示 添加流程定义对象(ProcessDefinition)缓存演示, see: Tweaking the process definition cache in Activiti 5.12 添加activ...

咖啡兔
2013/03/11
2.8K
8
分享2011年50个最棒的wordpress主题

日期:2011/10/29 来源:noupe.com 编译:Terry li - GBin1.com 可能会有很多读者愿意花大价钱来购买高质量的独特的wordpress主题,但是对于大多数人来说花40美金来购买优惠的wordpress主题更...

gbin1
2011/10/31
636
0
分享2011年50个最棒的wordpress主题 - 第一部分

日期:2011/10/29 来源:noupe.com 编译:Terry li - GBin1.com 可能会有很多读者愿意花大价钱来购买高质量的独特的wordpress主题,但是对于大多数人来说花40美金来购买优惠的wordpress主题更...

gbin1
2011/10/31
0
0
JFinal+Shiro能否再简便些?

@JFinal 你好,想跟你请教个问题: 最近关注Shiro,感觉它的身份、权限的认证很不错。 找到JFinal的shiroplugin,不过感觉还是有那么一点复杂,请使用过此插件的同学都分享下感受呢~ ///////...

车开源
2014/04/03
3.5K
4
Spring与MyBatis整合

序言 在MyBatis学习中,我们会发现很多重复性的代码,例如: //创建连接 private SqlSessionFactory sqlSessionFactory = SessionFactoryUtils .getSessionfactory().getSqlSessionFactory(......

开源俱乐部
2014/07/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql导入导出包括函数或者存储过程

mysql导入导出包括函数或者存储过程 2012-11-16 10:12:20 0个评论 收藏 我要投稿 mysql导入导出包括函数或者存储过程 1.mysql导出整个数据库 mysqldump -h hostname -u username -p databas...

rootliu
5分钟前
0
0
Hyperledger Fabric 客户端开发一

前面介绍了hyperledger Fabric 安装, Chaincode的开发和运维, 现在来说说hyperledger fabric的客户端相关的开发。hyperledger 的客户端开发, 实际上指的是Chaincode的客户端开发。 同传统...

十一月不远
9分钟前
0
0
第18章 Linux集群架构

keepalived介绍 在这里使用keepalived来实现高可用集群,因为heartbeat在centos6上有一些问题,影响实验效果 heartbeat 切换的时候,会不是很及时——>比如:主 已经宕机了,但 从 却一直启动...

Linux学习笔记
10分钟前
0
0
awk常用的几条命令组合

前言 最近在生产上查问题,也是练就了一下awk的命令。 生产上的数据安全性要求比较高,一般要拿到测试环境都需要脱敏,但是脱敏的数据会有很多程序上的不适应。 所以有时候查询问题,查询一条...

码代码的小司机
11分钟前
0
0
python 多版本安装及切换

1.安装必要的扩展 # yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-de 2.下载python3.7源码 # wget https://www.python.org/ftp/python......

青-争
11分钟前
0
0
看看8年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构

微服务架构是互联网很热门的话题,是互联网技术发展的必然结果。它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。虽然微服务架构没有公认的技术标...

Java大蜗牛
11分钟前
0
0
CDH的坑之Sqoop导出数据到MySQL

CDH的坑之Sqoop导出数据到MySQL 最近使用Sqoop从Hive导出数据到MySQL中,出现了一系列的问题,下面将这个问题记录一下,避免再度踩坑! 导出语句 sqoop export --connect jdbc:mysql://192....

星汉
14分钟前
0
0
PowerDesigner连接MySQL和逆向工程图

最近想梳理公司项目的表间关系,从项目后台管理系统的操作入手,以及代码的hibernate注解入手,都不算特别尽人意,于是最后还是鼓捣了一下PowerDesigner的逆向工程图,这样更直观一些。 想着...

Oo若离oO
15分钟前
0
0
威胁web应用安全的错误

一般绝大部分的web应用攻击都是没特定目标的大范围漏洞扫描,只有少数攻击确实是为入侵特定目标而进行的针对性尝试。这两种攻击都非常频繁,难以准确检测出来,许多网站的web应用防火墙都无法...

上树的熊
18分钟前
2
0
pypy2 install crypto error

install pycryptodome instead pip install pycryptodome

coord
21分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部