Jfinal中Shiro整合
来源:互联网 发布:sql搜索 编辑:程序博客网 时间:2024/04/28 23:07
第一步、环境配置
1、普通项目
官方下载shiro相应jar,地址:http://shiro.apache.org/download.html
2、maven项目
去官方赋值对应的dependency,地址:http://shiro.apache.org/download.html
第二步、设置项目入口web.xml
- <listener>
- <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
- </listener>
- <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>
- <dispatcher>REQUEST</dispatcher>
- <dispatcher>FORWARD</dispatcher>
- <dispatcher>INCLUDE</dispatcher>
- <dispatcher>ERROR</dispatcher>
- </filter-mapping>
切记在所有监听器与拦截器的最前方配置
第三步、在resources文件中创建shiro.ini文件
- [main]
- #realm
- jdbcRealm=com.haoyun.plugin.shiro.realm.JdbcRealm
- securityManager.realm=$jdbcRealm
- authc.loginUrl = /a/login
- authc.successUrl = /a/index
- logout.redirectUrl = /a/login
- [urls]
- /index = authc
- /a/logout = logout
其中jdbcRealm稍后自有介绍。
- securityManager.realm
设置shiro中领域,可以为多个。
- authc.loginUrl
设置认证拦截url。此处认证为登录,此处url为登录时提交的表单method属性中对应的url。
shiro内部自带的拦截器会去默认拦截。
- authc.successUrl
设置认证成功后的url跳转路劲。
- logout.redirectUrl
设置退出登录时跳转的url路劲。
- [urls]
此处配置为指定url 的权限如
- /index = authc
意思为如果访问index必须要进行验证通过其中有很多参数,authc只是其中一个认证权限
第四步、创建Realm
在此处本人使用jdbcRealm他继承org.apache.shiro.realm.AuthorizingRealm其中实现
- /**
- * 验证用户登录信息
- */
- @Override
- protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
- // TODO Auto-generated method stub
- String name = String.valueOf(token.getPrincipal());
- String password = new String((byte[])token.getCredentials());
- User user = userService.login(name);
- return new SimpleAuthenticationInfo(user , user.getPassword(),getName());
- }
- /**
- * 验证用户权限
- */
- @Override
- protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
- // TODO Auto-generated method stub
- User user = (User)principals.getPrimaryPrincipal();
- SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
- info.addStringPermission(permission);
- return info;
- }
doGetAuthenticationInfo认证方法当界面点击提交时拦截器会调用此方法进行认证。
根据以上方式获取password和loginname,不过切记shiro默认使用input【name】值为username与password,如果需要修改可在shiro.ini中进行修改。(具体修改方式请进官网查看文档。)认证完成后返回
- SimpleAuthenticationInfo
对象,此处存入查询的用户,与刚获取的用户密码(建议使用name获取用户对象让shiro进行密码验证),第三个参数getName(),为无用参数,打日志是会显示是那个realm执行的,多个realm时用于区分罢了。
在系统认证成功后将会调用doGetAuthorizationInfo方法进行权限获取,此方法中
- principals.getPrimaryPrincipal();
获取刚才存入的User对象
- info.addStringPermission("权限名称");
用户添加权限此处可以通过用户查询权限表进行查询。
具体使用
- @RequiresGroup("admin")
- public void testGroup(){
- renderText("有管理员组admin權限!");
- return;
- }
- @RequiresUser("admin")
- public void testUser(){
- renderText("有用户admin權限!");
- return;
- }
- @RequiresRoles("admin")
- public void testRoles(){
- renderText("有角色admin權限!");
- return;
- }
- @RequiresPermissions("xxx:xxx:xx")
此处几个权限已经够用了 额。
再使用时会报错是因为shiro不支持jfinal的注解。此处解决办法
此处就不一一讲解 下面会提供main包中java文件的下载链接。
第五步、拦截器
- interceptors.add(new ShiroInterceptor());
将上面main中添加到项目中后再config中配置此拦截器就可以使用了。
第六步、配置插件
- //在config配置中添加属性
- Routes routes = null;
- //并且在配置路由的最后将routes进行me的赋值
- routes = me;
- //在configPlugin方法内使用
- me.add(new ShiroPlugin(routes))
具体工作步骤有时间在讲解。
下载地址:http://download.csdn.net/detail/u013914892/9586807
前面少了第六步所以导致有个朋友没有成功,在这里抱歉。如果还有问题请联系本人Q群:470139910一起进步
- Jfinal中Shiro整合
- Jfinal整合shiro
- jfinal 整合shiro的使用
- JFinal-shiro-oAuth
- 把Shiro整合到SSM框架中
- 【shiro】--- spring整合shiro
- Jfinal + easyui 整合
- JFinal 整合Quartz
- Jfinal整合Beetl
- JFinal整合WebSocket开发
- maven +jfinal +bettl 整合
- Jfinal整合Webservice
- JFinal与websocket整合
- Jfinal整合EhCache
- jfinal spring 整合 集成 事物 spring-jfinal
- 【shiro】shiro和sping整合
- JFinal整合spring的websocket
- JFinal -spring整合的代码
- 基于51单片机IIC通信的AT24C02学习笔记
- Python_cmd的各种实现方法 (subprocess.Popen, os.system和commands.getstatusoutput)
- mysql 时间类型查询条件写法
- Oracle的PL/SQL使用窗口小技巧
- Html随机数random
- Jfinal中Shiro整合
- bootstarp轮播箭头火狐变样
- java虚拟机和内存模型
- 《古月ROS探索总结》学习笔记2
- deepin-15.4下Qt软件开发环境的搭建步骤 来自deepin社区 https://bbs.deepin.org/forum.php?mod=viewthread&tid=137949
- android mainfest配置,以及intent—filter中讲解
- centos7.3 + ipvsadm1.2.1 + httpd+lvs
- 写给所有程序员_你的逻辑可以更简洁易读吗?
- datagrid中load,reload,loadData方法的区别