apache shiro学习笔记(四) Web Support
来源:互联网 发布:java博客推荐 编辑:程序博客网 时间:2024/05/29 14:01
一、配置
web.xml(shiro1.2以后)
#配置监听器<listener>org.apache.shiro.web.env.EnvironmentLoaderListener</listener>#配置shiro.ini文件位置<context-param><param-name>shiroConfigLocations</param-name><param-value>/WEB-INF/some/path/shiro.ini</param-value></context-param>#配置过滤器<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>
web ini配置
2.1 [urls]
格式:_URL_ANT_PATH_EXPRESSION=_PATH_SPECIFIC_FILTER_CHAIN如:/account/**=ssl,authc(所有到应用路径下的/account或者他的子路径,都会触发ssl和authc过滤链,遵循先配置的生效原则)/account/**=ssl,authc/account/signup=anon
有个请求是/account/signup/index.html,那么下面那条配置不会被执行。
2.2 过滤链定义
等号右边的格式:filter1[optional_config1],filter2[optional_config2],…,filterN[optional_configN]。定义逗号分割的顺序是你想让请求经过的过滤链。
•filterN是在[main]区块被定义的过滤器
•[optional_configN]:特定的过滤器,特定的路径filter的配置
[main]
myFilter=com.company.web.some.FilterImplementation
myFilter.property1=value
[urls]
/some/path/**=myFilter
二、默认过滤器
过滤器名 全类名
anno————org.apache.shiro.web.filter.authc.AnnoymousFilter
authc————org.apache.shiro.web.filter.authc.FormAuthenticationFilter
authcBasic————org.apache.shiro.web.filter.BasicHttpAuthenticationFilter
logout————org.apache.shiro.web.filter.authc.LogoutFilter
noSessionCreation————org.apache.shiro.web.filter.session.NoSessionCreationFilter
perms————org.apache.shiro.web.filter.authz.PermissionAuthorizationFilter
port————org.apache.shiro.web.filter.authz.PortFilter
rest org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter
roles————org.apache.shiro.web.filter.authz.RolesAuthorizationFilter
ssl————org.apache.shiro.web.filter.authz.SslFilter
user————org.apache.shiro.web.filter.authc.UserFilter
三、启用和禁用过滤器
可以在filter的配置中删除filter来使filter无效。在shiro1.2之后,一个新特性添加可以时filter启用/禁用而不用删除它,如果启用(默认设置),请求会被如期的过滤。如果禁用,过滤器会允许请求立即通过去filterChain的下一个过滤器。
3.1 一般启用/禁用
设置一个过滤器的enabled属性为true或者false,默认的设置是true。
[main]ssl.enabled=false[urls]/another/path=ssl,roles[admin]
3.2 特定请求启用/禁用
OncePerRequestFilter实际上决定着过滤器在他的isEnabled(request,response)上是启用或者禁用的。这个方法默认返回enabled属性。如果你想让过滤器基于特定请求的尺度,可以重写OncePerRequestFilter.isEnabled(request,response)方法来表现更多的特定检查
3.3 特定路径启用/禁用
PathMatchingFilter是OncePerRequestFilter的子类,他可以回应基于特定路径的配置。如果你想要过滤器基于特定路径,你要重写PathMatchingFilter..isEnabled(request,response,path,pathConfig)方法
四、Session 管理
4.1 Servlet容器session
在web环境中,shiro默认的session管理器SessionManager是实现了ServletContainerSessionManager。
#配置servlet容器超时<session-config><session-timeout>30</session-timeout></session-config>
4.2 shiro自身的session
如果你想要你的session配置设置和集群在多种servlet容器中是便携的,或者你想控制特定的session/集群特性,你可以启用shiro的本身的session管理。它可以被用来支持所有的Subject和HttpServletRequest会话并且完全回避servlet容器
4.2.1 DefaultWebSessionManager
想要在web应用中启用自身的session管理,你需要配置一个自身的web-capable session管理来重写默认的那个基于servlet容器的session管理,一旦被配置,你可以设置DefaultWebSessionManager实例的属性,例如超时和集群。例如在ini文件中
[main]sessionManager=org.apache.shiro.web.session.mgt.DefaultWebSessionManagersecurityManager.sessionManager=$sessionManager。
4.2.2 session cookie
DefaultWebSessionManager支持两种特定web的配置属性:sessionIdCookieEnabled(这是一个boolean值)和sessionIdCookie(一个Cookie实例)。默认的sessionIdCookie实例是SimpleCookie。cookie的默认名是JSESSIONID。shiro的cookie支持HttpOnly标志。为了额外的安全,sessionIdCookie默认设置HttpOnly为true。
#配置cookie domain[main]securityManager.sessionManager.sessionIdCookie.domain=foo.com#禁用session cookie[main]securityManager.sessionManager.sessionIdCookieEnabled=false
五、记住我服务
如果AuthenticationToken实现了org.apache.shiro.authc.RememberMeAuthenticationToken接口,shiro将会提供rememberMe服务。这个接口提供了一个方法 boolean isRememberMe();如果这个方法返回值是true,shiro将会跨session记住终端用户的标识号。
#Java codeUsernamePasswordToken token=new UsernamePasswordToken(username,password);token.setRememberMe(true);SecurityUtils.getSubject().login(token);
5.1 form-based Login
在web应用中,默认的authc过滤器是FormAuthenticationFilter,它支持读取‘rememberMe’布尔值作为表单/请求参数。默认情况下,它期望请求参数被命名为rememberMe.FormAuthenticationFilter会检查请求参数username,password,rememberMe。如果使用不同的请求参数,需要做配置。
[main]authc.loginUrl=/login.jspauthc.usernameParam=somethingOtherThanUsernameauthc.passwordParam=somethingOtherThanPasswordauthc.rememberParam=somethingOtherThanRememberMe[urls]login.jsp=authc
5.2 cookie配置
你可以通过设置默认的{{RememberMeManager}}多种cookie属性配置rememberMe cookie运作方式。例如:
[main]securityManager.rememberMeManager.cookie.name=foosecurityManager.rememberManager.cookie.maxAge=blah
5.3 自定义的RmemberMeManager
[main]rememberMeManager=com.my.impl.RememberMeManagersecurityManager.rememberMeManager=$rememberMeManager
六、JSP/GSP标签库
6.1 标签库配置
TLD文件在shiro-web.jar文件中的META-INF/shiro.tld。使用标签,在jsp文件中添加标签声明。
<%@ taglib prefix="shiro" url="http://shiro.apache.org/tags" %>
6.2 guest标签
guest标签只有在当前Subject是guest时,它才会显示被包裹的内容。Guest是当前Subject没有标识。
<shiro:guest> hello there</shiro:guest>
6.3 user标签
user标签只有在当前Subject是user时,它才会显示被包裹的内容.user用户有已知的标识。用法同guest标签。
6.4 authenticated标签
只有当前的Subject在他们当前的session中被成功的识别,它才会显示内容。它比user标签更严格。
<shiro:authenticated> update you content</shiro:authenticated>
6.5 notAuthenticated标签
只有当前的Subject在他们当前的session中没有被成功的识别,它才会显示内容。用法同authenticated标签。
6.6 principal标签
它会输出Subject的principal或者是principal的一个属性。
hello,<shiro:principal/> ,how are you today.
principal标签默认输出subject.getPrincipal()值,但是如果你项输出的值不是主要的principal,而是在subject的集合中,你可以使用类型来确认principal要输出的值.
User ID:<pricipal type="java.lang.Integer" />
但是如果principal主要的principal或者typed是一个复杂的对象而不是一个简单的字符串。你可以使用property属性来表名要读取的名字的属性
#jsp codeHello ,<shiro:principal property="firstName"/>,how are you today?
或者两者结合
hello,<shiro:principal property="firstName" type="com.foo.user"/>,how are you today?
他等同于:
<%=SecurityUtils.getSubject().getPrincipals().oneByType(com.foo.user.Class).getFirstName().toString()%>
6.7 hasRole标签
只有当前的Subject被分配了特定的角色,它才会显示被包裹的内容。
<shiro:hasRole name="administrator"> hello administrator</shiro:hasRole>
6.8 lacksRole标签
只有当前的Subject没有被分配了特定的角色,它才会显示被包裹的内容。用法同hasRole
6.9 hasAnyRole标签
只有当前的Subject被分配了指定角色中的任意一个,它就会显示被包裹的内容。
<shiro:hasAnyRole name="developer,project manager,administrator">you’re either a developer,project manager,administrator</shiro:hasAnyRole>
6.10 hasPermission标签
只有当前的Subject有指定的权限,它才会显示被包裹的内容。
<shiro:hasPermission name="user:create"><a href="#">create a new user</a></shiro:hasPermission>
6.11 lacksPermission标签
只有当前的Subject有指定的权限,它才会显示被包裹的内容。用法同hasPermission。
- apache shiro学习笔记(四) Web Support
- Apache Shiro Web Support学习笔记
- Apache Shiro学习(四)Realm 域
- apache-shiro 学习笔记
- apache-shiro 学习笔记
- Apache Shiro学习笔记
- apache Shiro学习笔记(一)
- apache Shiro学习笔记(三)Authorization
- Shiro 学习笔记(7)—— Shiro 集成 Web
- Apache Shiro Authentication学习笔记
- Apache Shiro Authorization学习笔记
- Apache Shiro Permission学习笔记
- Apache Shiro Relam学习笔记
- Apache Shiro Caching学习笔记
- Apache Shiro Subject学习笔记
- Apache Shiro 学习笔记1
- Apache Shiro学习笔记(1)
- Apache Shiro学习笔记(二)身份验证获取SecurityManager
- Ubuntu通过PPTP协议使用VPN
- UE4之制作局域网游戏
- Spring Boot教程
- bzoj 1295: [SCOI2009]最长距离(SPFA)
- android 动态折线图
- apache shiro学习笔记(四) Web Support
- 作业一
- EasyRTMP+EasyDSS实现一套完整的紧急视频回传直播与存储回放方案
- Flume环境部署
- CUDA之常用算法:求平方和
- HTTP协议的概述
- Android也有beacon了
- 在vnpy中使用mongdb数据库插入tb导出的csv数据进行回测的方法
- workerman php 跨域头设置