文档章节

JFinal ShiroPlugin学习笔记

zhuqianli
 zhuqianli
发布于 2017/01/18 14:55
字数 682
阅读 128
收藏 4

Java 权限框架 Shiro

http://blog.csdn.net/qq_30739519/article/details/51478843

给JFinal添加Shiro插件功能,支持Shiro所有注解-实现篇

https://my.oschina.net/myaniu/blog/137198

给JFinal添加Shiro插件功能,支持Shiro所有注解-使用篇

https://my.oschina.net/myaniu/blog/137205

Shiro的Session管理

https://my.oschina.net/boonya/blog/348149

 

<dependency>
  <groupId>org.apache.shiro</groupId>
  <artifactId>shiro-all</artifactId>
  <version>1.4.0-RC2</version>
</dependency>
<dependency>
  <groupId>cn.dreampie</groupId>
  <artifactId>jfinal-shiro</artifactId>
  <version>0.2</version>
</dependency>

 

anon:例子/admins/**=anon 没有参数,表示可以匿名使用。

authc:例如/admins/user/**=authc表示需要认证(登录)才能使用,没有参数

roles(角色):例子/admins/user/**=roles[admin],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,当有多个参数时,例如admins/user/**=roles["admin,guest"],每个参数通过才算通过,相当于hasAllRoles()方法。

perms(权限):例子/admins/user/**=perms[user:add:*],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,例如/admins/user/**=perms["user:add:*,user:modify:*"],当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法。

rest:例子/admins/user/**=rest[user],根据请求的方法,相当于/admins/user/**=perms[user:method] ,其中method为post,get,delete等。

port:例子/admins/user/**=port[8081],当请求的url的端口不是8081是跳转到schemal://serverName:8081?queryString,其中schmal是协议http或https等,serverName是你访问的host,8081是url配置里port的端口,queryString

是你访问的url里的?后面的参数。

authcBasic:例如/admins/user/**=authcBasic没有参数表示httpBasic认证

ssl:例子/admins/user/**=ssl没有参数,表示安全的url请求,协议为https

user:例如/admins/user/**=user没有参数表示必须存在用户,当登入操作时不做检查

 

aythc.loginUrl = /index.ftl 表示authc认证失败时,返回到的路径

/** = anon 表示所有路径都可以不需要认证

/* = anon  下面就可以正常配置了

/a/** = user

/b/** = authc

 

对shiro理解,认证登陆部分

创建类继承AuthorizingRealm  

实现两个方法  

下面这个方法用于登录认证的

/**
 * 登录认证
 * 根据Token中的username 从数据库中获取用户信息  如果不存在返回null
 * 存在,返回对象SimpleAuthenticationInfo
 *          PrincipalCollection principals === username和Realm.name
 *          Object credentials === password
 *          ByteSource credentialsSalt === 解密用的salt
 */
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
    UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
    if(!"qaz".equals(token.getUsername())){
        return null;//返回空说明账户不存在
    }
    return new SimpleAuthenticationInfo("qaz","123", getName());
}

登录

public void login(){
    UsernamePasswordToken token = new UsernamePasswordToken(getPara(0),getPara(1));
    Subject currentuser = SecurityUtils.getSubject();
    if(!currentuser.isAuthenticated()){
        try {
            currentuser.login(token);
        } catch (UnknownAccountException e) {
            renderText("账户不存在");
            return;
        } catch (IncorrectCredentialsException e){
            renderText("密码错误");
            return;
        }
    }else{
        renderText("已认证");
        return;
    }
    renderText("登录成功");
}
SecurityUtils.getSubject().getPrincipals().getPrimaryPrincipal();//登录后,获取用户名

退出

public void logout(){
    Subject currentuser = SecurityUtils.getSubject();
    if(currentuser.isAuthenticated()) {
        currentuser.logout();
    }
    renderText("用户退出");
}

 

© 著作权归作者所有

zhuqianli
粉丝 5
博文 131
码字总数 57017
作品 0
杭州
程序员
私信 提问
Jfaker与Shiro是如何集成的

从Web.xml入手。代码片段: <context-param> <param-name>shiroEnvironmentClass</param-name> <param-value>com.jfaker.framework.security.shiro.ShiroIniWebEnvironment</param-value> <......

车开源
2015/01/25
0
0
JFinal+Shiro能否再简便些?

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

车开源
2014/04/03
3.7K
4
Jfinal-ext shiro注解不起作用

我现在环境Jfinal2.0 + Jfinal-ext , 其中用到了ext的shiro,也自定义了Reaml,现在的问题是ext的shiro注解无效,不起作用(使用shiro.ini文件中的urls配置和在代码里直接调用curuser.isPer...

tomney2008
2015/07/17
587
1
JFinal 整合 Shiro

最近整合JFinal和Shiro遇到的问题,希望能给你们提示与帮助。 首先,JFinal和Shiro本人都是刚刚接触,JFinal上手很快,但Shiro上手比较费劲,看了很长时间的文档。 下面说一下整合JFinal配置...

leon_rock
2013/06/02
8K
10
给JFinal添加Shiro插件功能,支持Shiro所有注解-实现篇

2015年8月3日更新: 支持JFinal 2.0 版本,同时给出了一些实际代码,想见git @JFinal给出了一些好的建议,已重构部分代码。 代码放在oschina的git上,访问地址: http://git.oschina.net/mya...

玛雅牛
2013/06/12
0
8

没有更多内容

加载失败,请刷新页面

加载更多

NIO基于长度域的报文在Netty下的解码

1, 先复习一下粘包/拆包 1.1, 粘包/拆包的含义 TCP是个“流”协议, 并不了解上层业务数据的具体含义, 它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP...

老菜鸟0217
今天
8
0
从零开始搭建spring-cloud(2) ----ribbon

在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的。Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是feign。 其实我们已经在上...

Vincent-Duan
今天
19
0
get和post的区别?

doGet:路径传参。效率高,安全性差(get的传送数据量有限制,不能大于2Kb) doPOST:实体传参。效率低,安全性好 建议: 1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Pos...

花无谢
昨天
4
0
当谈论迭代器时,我谈些什么?

当谈论迭代器时,我谈些什么? 花下猫语:之前说过,我对于编程语言跟其它学科的融合非常感兴趣,但我还说漏了一点,就是我对于 Python 跟其它编程语言的对比学习,也很感兴趣。所以,我一直...

豌豆花下猫
昨天
14
0
10天学Python直接做项目,我做了这5件事

初学者如何尽快上手python? 市面上关于如何学python的资料很多,但是讲的都太复杂。 我就是很简单的几句话,从小白到开发工程师,我只做了五件事。 我觉得任何商业计划书如果不能用几句话讲...

Python派森
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部