栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Shiro学习(七)——Shiro与web集成

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Shiro学习(七)——Shiro与web集成

前言

Shiro作为一个权限认证框架,最主要的服务对象应该就是JavaWeb。因此如何与web集成是发挥shiro作用的关键。这里以最基础的与servlet集成作为例子。

新建简单的servlet应用

这里以《Eclipse新建基于Servlet3.x的maven项目》这篇文章的方式构建基本的servlet,就不在本文叙述了。

Servlet与Shiro集成 在web.xml配置监听器和过滤器

首先在web.xml中添加如下内容:

	
		org.apache.shiro.web.env.EnvironmentLoaderListener
	

	
		ShiroFilter
		org.apache.shiro.web.servlet.ShiroFilter
	

	
		ShiroFilter
		/*
		REQUEST
		FORWARD
		INCLUDE
		ERROR
	

添加一个监听器EnvironmentLoaderListener,这个监听器会默认创建IniWebEnvironment,读取默认位置的shiro.ini文件,然后默认创建DefaultWebSecurityManager。

然后ShiroFilter这个过滤器,替我们实现web登录及权限认证过滤器的功能。可以回想一下,自己写一个登录认证功能,都会写个filter,当用户访问哪些路径时,必须是已登录的,或者必须具备某些权限。现在等于ShiroFilter实现了这个filter的功能,我们只需要配置路径即可。

配置shiro.ini

下一步是在shiro.ini中配置过滤器对应的路径

[main]
#登录认证的页面
authc.loginUrl=/login
#缺少权限时跳转的页面
roles.unauthorizedUrl=/unauthorized.jsp

[users]
zhang=123,role1
wang=456,role1,role2
li=123
[roles]
role1=user:create,update
role2=user:create,delete

[urls]
#请求login的时候不需要权限,游客身份即可(anon)
/login=anon
/login.jsp=anon

#请求/user/updatePwd.jsp的时候,需要身份认证(authc)
/*=authc

#请求/admin的时候,需要角色认证,必须是拥有admin角色的用户才行
/admin/*.jsp=roles[role2]

配置都不难理解,读者可以自行尝试一下,如果未登陆时直接访问/shiroWeb/hello会怎么样,也可以试下以zhang这个用户访问/admin路径下的页面会怎么样。上面/unauthorized.jsp页面和/admin下的页面,读者可以自行编写,没什么特殊要求。

Shiro提供了以下这些过滤器,我们用了其中的anon、authc和roles。其他的各位也可以自行尝试,如果后面有时间我也会逐个尝试并在文章中展示:

Filter NameClass
anonorg.apache.shiro.web.filter.authc.AnonymousFilter
authcorg.apache.shiro.web.filter.authc.FormAuthenticationFilter
authcBasicorg.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter
authcBearerorg.apache.shiro.web.filter.authc.BearerHttpAuthenticationFilter
invalidRequestorg.apache.shiro.web.filter.InvalidRequestFilter
logoutorg.apache.shiro.web.filter.authc.LogoutFilter
noSessionCreationorg.apache.shiro.web.filter.session.NoSessionCreationFilter
permsorg.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter
portorg.apache.shiro.web.filter.authz.PortFilter
restorg.apache.shiro.web.filter.authz.HttpMethodPermissionFilter
rolesorg.apache.shiro.web.filter.authz.RolesAuthorizationFilter
sslorg.apache.shiro.web.filter.authz.SslFilter
userorg.apache.shiro.web.filter.authc.UserFilter

Session有效时间

对Web开发有一定了解都知道登录之后,后台会为用户保存一个session,当下次检验是否已登录时,可以根据sessionId进行判断。session是存在有效期的,有效期过了之后就要重新登录了,我们可以在web.xml中配置session有效期,在web.xml中添加这一段:

	
		30
	

这里指session有效期为30分钟。如果想测试一下效果的话,读者可以尝试改成1分钟。这样登录后过了一分钟再次访问shiroWeb/hello看看效果如何。

小结

Shiro与web的集成是开发javaweb应用非常重要的一环。本文的应用方式基本可以满足小型Servlet应用的需要。通常现在的javaweb开发还需要考虑到和spring的集成。另外关于session,Shiro默认使用Servlet的session,不过实际项目开发尤其是分布式应用会把session存放到redis中给分布式系统各主机访问,所以后续还要考虑Shiro和redis的集成。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/301933.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号