第一步、环境配置
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一起进步