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

  1.         <listener>
  2.     <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
  3. </listener>
  4. <filter>
  5.     <filter-name>ShiroFilter</filter-name>
  6.     <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
  7. </filter>
  8. <filter-mapping>
  9.     <filter-name>ShiroFilter</filter-name>
  10.     <url-pattern>/*</url-pattern>
  11.     <dispatcher>REQUEST</dispatcher>
  12.     <dispatcher>FORWARD</dispatcher>
  13.     <dispatcher>INCLUDE</dispatcher>
  14.     <dispatcher>ERROR</dispatcher>
  15. </filter-mapping>

    切记在所有监听器与拦截器的最前方配置

第三步、在resources文件中创建shiro.ini文件

  1. [main]
  2. #realm
  3. jdbcRealm=com.haoyun.plugin.shiro.realm.JdbcRealm
  4. securityManager.realm=$jdbcRealm
  5. authc.loginUrl = /a/login
  6. authc.successUrl = /a/index
  7. logout.redirectUrl = /a/login
  8. [urls]
  9. /index = authc 
  10. /a/logout = logout

 其中jdbcRealm稍后自有介绍。

  1. securityManager.realm

设置shiro中领域,可以为多个。

  1. authc.loginUrl

设置认证拦截url。此处认证为登录,此处url为登录时提交的表单method属性中对应的url。

shiro内部自带的拦截器会去默认拦截。

  1. authc.successUrl

设置认证成功后的url跳转路劲。

  1. logout.redirectUrl

设置退出登录时跳转的url路劲。

  1. [urls]

此处配置为指定url 的权限如

  1. /index = authc

意思为如果访问index必须要进行验证通过其中有很多参数,authc只是其中一个认证权限

第四步、创建Realm 

    在此处本人使用jdbcRealm他继承org.apache.shiro.realm.AuthorizingRealm其中实现

  1. /**
  2.  * 验证用户登录信息
  3.  */
  4. @Override
  5. protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
  6. // TODO Auto-generated method stub
  7. String name = String.valueOf(token.getPrincipal());
  8. String password = new String((byte[])token.getCredentials());
  9. User user = userService.login(name);
  10. return new SimpleAuthenticationInfo(user , user.getPassword(),getName());
  11. }
  12. /**
  13.  * 验证用户权限
  14.  */
  15. @Override
  16. protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
  17. // TODO Auto-generated method stub
  18. User user = (User)principals.getPrimaryPrincipal();
  19. SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
  20. info.addStringPermission(permission);
  21. return info;
  22. }

doGetAuthenticationInfo认证方法当界面点击提交时拦截器会调用此方法进行认证。

根据以上方式获取password和loginname,不过切记shiro默认使用input【name】值为username与password,如果需要修改可在shiro.ini中进行修改。(具体修改方式请进官网查看文档。)认证完成后返回

  1. SimpleAuthenticationInfo

对象,此处存入查询的用户,与刚获取的用户密码(建议使用name获取用户对象让shiro进行密码验证),第三个参数getName(),为无用参数,打日志是会显示是那个realm执行的,多个realm时用于区分罢了。

在系统认证成功后将会调用doGetAuthorizationInfo方法进行权限获取,此方法中

  1. principals.getPrimaryPrincipal();

获取刚才存入的User对象

  1. info.addStringPermission("权限名称");

用户添加权限此处可以通过用户查询权限表进行查询。

具体使用

  1.         @RequiresGroup("admin")
  2. public void testGroup(){
  3. renderText("有管理员组admin權限!");
  4. return;
  5. }
  6. @RequiresUser("admin")
  7. public void testUser(){
  8. renderText("有用户admin權限!");
  9. return;
  10. }
  11. @RequiresRoles("admin")
  12. public void testRoles(){
  13. renderText("有角色admin權限!");
  14. return;
  15. }
  16. @RequiresPermissions("xxx:xxx:xx")

此处几个权限已经够用了 额。

再使用时会报错是因为shiro不支持jfinal的注解。此处解决办法

blob.png

此处就不一一讲解 下面会提供main包中java文件的下载链接。

第五步、拦截器

  1. interceptors.add(new ShiroInterceptor());

将上面main中添加到项目中后再config中配置此拦截器就可以使用了。

第六步、配置插件

  1. //在config配置中添加属性
  2. Routes routes = null;
  3. //并且在配置路由的最后将routes进行me的赋值
  4. routes = me;
  5. //在configPlugin方法内使用
  6. me.add(new ShiroPlugin(routes))


具体工作步骤有时间在讲解。

下载地址:http://download.csdn.net/detail/u013914892/9586807

前面少了第六步所以导致有个朋友没有成功,在这里抱歉。如果还有问题请联系本人Q群:470139910一起进步

原创粉丝点击