Jfinal中Shiro整合

第一步、环境配置

        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的注解。此处解决办法

blob.png

此处就不一一讲解 下面会提供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一起进步