- 浏览: 156727 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
eclipseakwolf:
很棒的文章
Shiro User Manual-Authentication -
xugangqiang:
very good
Java Concurrent Programming (1) -
jlcon:
是不是AbstractShiroTest还需要继承EasyMo ...
Shiro User Manual-Testing -
jlcon:
createNiceMock这个EasyMockSupport ...
Shiro User Manual-Testing -
Technoboy:
53873039oycg 写道楼主:问下,你的那个dao接口的 ...
Shiro Example
1. Configuration
将Shiro集成到web应用中非常简单,只需要在web.xml中配置ContextListener和Filter即可。需要注意的是,如果是Spring web应用,请参考Shiro与Spring集成那节。
a. web.xml
Shiro1.2及其以后版本,在web.xml中添加:
这种配置,可以将INI文件放到以下任意一处:
1. /WEB-INF/shiro.ini
2. shiro.ini在classpath下
上面的配置会执行以下操作:
1. EnvironmentLoaderListener初始化WebEnvironment(此接口包含了Shiro所有的操作)接口,并将它设置到ServletContext,之后,就可以通过WebUtils.getRequiredWebEnvironment(servletContext)获取WebEnvironment实例。
2. 对所有的请求,ShiroFilter将使用WebEnvironment执行所有的安全操作。
3. filter-mapping的配置使得所有的请求都要经过ShiroFilter,以保证请求的安全性。
建议将ShiroFilter filter-mapping配到其他Filter filter-mapping之前以确保Shiro好用。
b. Custom WebEnvironment Class
默认情况下,EnvironmentLoaderListener会创建IniWebEnvironment实例(即配置文件为INI格式)。可以通过设置ServletContext的context-param参数自定义WebEnvironment实例:
自定义WebEnvironment实例允许你以其他方式解析配置文件。还可以继承IniWebEnvironment进行一些其他的操作,甚至支持不同的文件配置。比如,如果想通过XML方式配置Shiro,就可以创建基于XML形式的XmlWebEnvironment实现。
c. Custom Configuration Locations
在web.xml中,添加context-param参数,以改变配置文件的存放位置:
默认使用ServletContext.getResource加载配置文件,即相对于应用根路径"/"。可以使用资源前缀将配置指向文件系统,类路径,URL:
Shiro1.1及其以前版本的配置:
这个配置,需要你的Shiro配置文件为INI格式,且需要放在classpath下(比如: classpath:shiro.ini)。
如果你想替换默认的文件(/WEB-INF/shiro.ini or classpath:shiro.ini),可以通过指定init-param参数:
不指定资源前缀的话,就使用默认的ServletContext.getResource加载配置文件。需要注意的是:ServletContext资源路径是1.2及其以后版本的功能,1.2以后版本配置configPath,必须指定资源前缀classpath:, file: 或 url: 。
通过指定资源前缀配置文件:
也可以把INI文件中的内容直接写在web.xml中:
2. Web INI configuration
在Configuation那章,我们已经讲述了[main], [users] and [roles]的配置,这里我们只讲述[urls]的配置。
[urls]
这部分允许你为不同URL定义专门的过滤器。定义格式:
下面是一个例子:
a. URL Path Expressions
等号左边是相对于应用根路径的Ant风格路径表达式,比如:
这行表示,对于请求路径是/account或其子路劲(/account/foo, /account/bar/baz等)将触发'ssl, authc'过滤器链。需要注意,所有表达式都是相对应用根路径(/)。
1. Order Matters!
URL定义的顺序很重要,对于传入的请求,它会按顺序依次匹配,最先匹配的即使用这个过滤器链。比如:
如果一个请求的路径是/account/signup/index.html(可被匿名用户访问),请求将不能被处理。因为/account/**匹配请求的路径,并将短路所有其他路径。
b. Filter Chain Definitions
等号右边是以逗号","分隔的过滤器定义,如果和请求路径匹配,将使用这些过滤器进行处理。它必须符合以下格式:
1. filterN是定义在[main]部分的过滤器。
2. [optional_configN]选填内容,用于特殊过滤器的配置,如果过滤器对URL没有特殊的配置,简写为filterN。
需要注意,过滤器的配置顺序即为调用顺序。当请求的执行条件不满足时,过滤器可以对response进行任何操作,比如执行跳转,返回HTTP错误码等。如果请求条件满足,会进入下一个过滤器,直至到最后的视图。
如果想自定义过滤器,继承org.apache.shiro.web.filter.PathMatchingFilter即可。
c. Available Filters
[main]定义的过滤器都可以在此处引用:
3. Default Filters
对于web应用,Shiro会默认创建一些过滤器,并可以在[main]部分引用。
默认的过滤器实例都是通过枚举DefaultFilter类定义的,枚举的name字段即为过滤器的名字:
4. Enabling and Disabling Filters
如果某个过滤器不使用的话,我们可以直接删除掉。Shiro1.2版本,通过父类OncePerRequestFilter支持,可以将不使用的过滤器关闭,那么请求就不会经过这个过滤器。Shiro默认的所有过滤器都继承了这个类,所以,这些过滤器都可以进行打开和关闭操作。
a. General Enabling/Disabling
OncePerRequestFilter可控制过滤器对请求的打开和关闭,也可基于每次请求进行打开和关闭。通过设置过滤器的enabled属性即可,默认为true:
b. Request-specific Enabling/Disabling
OncePerRequestFilter实际上通过filter的isEnabled方法判断过滤器是否打开或关闭。该方法默认返回enabled属性值。如果你想基于请求条件决定其打开与否,可覆写isEnabled(request,response)方法。
c. Path-specific Enabling/Disabling
PathMatchingFilter可以根据配置的特殊路径进行过滤。就是说,可以依据配置的路径决定打开还是关闭过滤器。如果你想通过这种方式,需要覆写PathMatchingFilter的PathMatchingFilter isEnabled(request,response,path,pathConfig)方法。
5. Session Management
a. Servlet Container Sessions
在web环境下,ServletContainerSessionManager为SessionManager的实现类。它把所有session的管理全部委托给了容器,好的一面是,对于当前的session配置,完全有效。不好的一面是,session的行为依赖容器,比如说,你想做集群,如果测试用Jetty,但是生产环境是Tomcat,那么移植会很麻烦。
b. Servlet Container Session Timeout
如果使用容器支持的session管理,配置session的超时如下:
c. Native Sessions
如果想让session的配置和集群可在容器间移植,或者想定义session的特性,可以使用Shiro自带的session管理,即native session management。
d. DefaultWebSessionManager
如果想使用自带的session管理器,需要在ini文件中,将DefaultWebSessionManager实例配置到SecurityManager:
当配置了DefaultWebSessionManager后,可以进行相应属性的设置。具体请参考 Session Management那节。
e. Native Session Timeout
对于自带session的超时设置,请查看Session Management那节。
f. Session Cookie
DefaultWebSessionManager有两个和web相关的属性:
如果配置了Cookie实例,可通过sessionIdCookie属性将session ID设置到HTTP Cookie的头信息里。
g. Session Cookie Configuration
DefaultWebSessionManager的sessionIdCookie默认为SimpleCookie。可通过SimpleCookie属性设置任何值到HTTP Cookie里:
默认使用JSESSIONID为cookie的名。在Servlet2.4和2.5环境下,支持HttpOnly。
h. Disabling the Session Cookie
如果不想使用cookie,可将sessionIdCookieEnabled设置为false:
6. Remember Me Services
如果AuthenticationToken实现了org.apache.shiro.authc.RememberMeAuthenticationToken接口,就具有了rememberMe服务。RememberMeAuthenticationToken接口有一个方法:
如果方法返回true,Shiro就会在本次会话中记住用户的标识。UsernamePasswordToken实现了这个接口并具有rememberMe功能。
6.1 Programmatic Support
对实现了org.apache.shiro.authc.RememberMeAuthenticationToken接口的类,只需要设置其setRememberMe发true即可。
6.2 Form-based Login
对于web应用,过滤器authc的默认实现为FormAuthenticationFilter,它通过将rememberMe字段设置到请求参数里,以开启Remember Me服务:
在login.jsp页面中加一个复选框:
过滤器FormAuthenticationFilter默认使用username, password和rememberMe作为参数名。可通过如下设置重新定义参数名:
6.3 Cookie configuration
可以通过RememberMeManager设置cookie相关的属性:
6.4 Custom RememberMeManager
如果默认的RememberMeManager不能满足你的需求,可以自定义RememberMeManager 实现:
7. JSP / GSP Tag Library
Shiro提供了JSP/GSP标签库,可以根据当前Subject的状态,控制JSP,JSTL,GSP的内容输出。
7.1 Tag Library Configuration
在页面中引入如下配置即可(TLD文件绑定在shiro-web.jar的META-INF/shiro.tld里):
7.2 The guest tag
guest标签中的内容只能被Guest用户所看到。(guest用户指没有登录或没有从Remember Me服务中获取标识身份的Subject)。
7.3 The user tag
user标签和guest标签正好相反。user标签中的内容必须为登录或者从Remember Me服务中获取标识的用户所看到。需要注意,它和authenticated有语义上的不同。
7.4 The authenticated tag
authenticated标签表示当前的用户必须被本次会话所认证过。
7.5 The notAuthenticated tag
notAuthenticated标签语义正好和authenticated相反,表示当前用户还没有被当前会话所认证过:
7.6 The principal tag
principal标签会输出当前用户(Subject)的标识:
如果当前用户没有任何表示信息,会输出toString方法值。相当于:
7.7 Typed principal
principal标签默认输出subject.getPrincipal()的值,如果你不想输出主要的标识信息,可以通过查找标识的类型,输出其他值:
等同于:
7.8 Principal property
如果标识的信息不单单是字符串,而是一个引用类型,又想使用引用类型的属性,可使用property属性:
等同于:
还可以和type组合起来使用:
等同于:
7.9 The hasRole tag
hasRole标签表示当前的用户必须具有指定的角色:
7.10 The lacksRole tag
和hasRole相反,lacksRole标签表示当前用户不具有指定的角色:
7.11 The hasAnyRole tag
hasAnyRole标签表示,当前用户必须具有任意角色列表中的一项。角色列表使用逗号分隔:
7.12 The hasPermission tag
hasPermission标签表示当前用户必须具有指定的权限:
7.13 The lacksPermission tag
和hasPermission相反,lacksPermission标签表示,当前用户不具有指定的权限:
将Shiro集成到web应用中非常简单,只需要在web.xml中配置ContextListener和Filter即可。需要注意的是,如果是Spring web应用,请参考Shiro与Spring集成那节。
a. web.xml
Shiro1.2及其以后版本,在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>
这种配置,可以将INI文件放到以下任意一处:
1. /WEB-INF/shiro.ini
2. shiro.ini在classpath下
上面的配置会执行以下操作:
1. EnvironmentLoaderListener初始化WebEnvironment(此接口包含了Shiro所有的操作)接口,并将它设置到ServletContext,之后,就可以通过WebUtils.getRequiredWebEnvironment(servletContext)获取WebEnvironment实例。
2. 对所有的请求,ShiroFilter将使用WebEnvironment执行所有的安全操作。
3. filter-mapping的配置使得所有的请求都要经过ShiroFilter,以保证请求的安全性。
建议将ShiroFilter filter-mapping配到其他Filter filter-mapping之前以确保Shiro好用。
b. Custom WebEnvironment Class
默认情况下,EnvironmentLoaderListener会创建IniWebEnvironment实例(即配置文件为INI格式)。可以通过设置ServletContext的context-param参数自定义WebEnvironment实例:
<context-param> <param-name>shiroEnvironmentClass</param-name> <param-value>com.foo.bar.shiro.MyWebEnvironment</param-value> </context-param>
自定义WebEnvironment实例允许你以其他方式解析配置文件。还可以继承IniWebEnvironment进行一些其他的操作,甚至支持不同的文件配置。比如,如果想通过XML方式配置Shiro,就可以创建基于XML形式的XmlWebEnvironment实现。
c. Custom Configuration Locations
在web.xml中,添加context-param参数,以改变配置文件的存放位置:
<context-param> <param-name>shiroConfigLocations</param-name> <param-value>YOUR_RESOURCE_LOCATION_HERE</param-value> </context-param>
默认使用ServletContext.getResource加载配置文件,即相对于应用根路径"/"。可以使用资源前缀将配置指向文件系统,类路径,URL:
file:/home/foobar/myapp/shiro.ini classpath:com/foo/bar/shiro.ini url:http://confighost.mycompany.com/myapp/shiro.ini
Shiro1.1及其以前版本的配置:
<filter> <filter-name>ShiroFilter</filter-name> <filter-class>org.apache.shiro.web.servlet.IniShiroFilter</filter-class> </filter> ... <!-- Make sure any request you want accessible to Shiro is filtered. /* catches all --> <!-- requests. Usually this filter mapping is defined first (before all others) to --> <!-- ensure that Shiro works in subsequent filters in the filter chain: --> <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>
这个配置,需要你的Shiro配置文件为INI格式,且需要放在classpath下(比如: classpath:shiro.ini)。
如果你想替换默认的文件(/WEB-INF/shiro.ini or classpath:shiro.ini),可以通过指定init-param参数:
<filter> <filter-name>ShiroFilter</filter-name> <filter-class>org.apache.shiro.web.servlet.IniShiroFilter</filter-class> <init-param> <param-name>configPath</param-name> <param-value>/WEB-INF/anotherFile.ini</param-value> </init-param> </filter>
不指定资源前缀的话,就使用默认的ServletContext.getResource加载配置文件。需要注意的是:ServletContext资源路径是1.2及其以后版本的功能,1.2以后版本配置configPath,必须指定资源前缀classpath:, file: 或 url: 。
通过指定资源前缀配置文件:
<init-param> <param-name>configPath</param-name> <param-value>url:http://configHost/myApp/shiro.ini</param-value> </init-param>
也可以把INI文件中的内容直接写在web.xml中:
<filter> <filter-name>ShiroFilter</filter-name> <filter-class>org.apache.shiro.web.servlet.IniShiroFilter</filter-class> <init-param><param-name>config</param-name><param-value> # INI Config Here </param-value></init-param> </filter>
2. Web INI configuration
在Configuation那章,我们已经讲述了[main], [users] and [roles]的配置,这里我们只讲述[urls]的配置。
# [main], [users] and [roles] above here ... [urls]
[urls]
这部分允许你为不同URL定义专门的过滤器。定义格式:
URL_Ant_Path_Expression = Path_Specific_Filter_Chain
下面是一个例子:
[urls] /index.html = anon /user/create = anon /user/** = authc /admin/** = authc, roles[administrator] /rest/** = authc, rest /remoting/rpc/** = authc, perms["remote:invoke"]
a. URL Path Expressions
等号左边是相对于应用根路径的Ant风格路径表达式,比如:
/account/** = ssl, authc
这行表示,对于请求路径是/account或其子路劲(/account/foo, /account/bar/baz等)将触发'ssl, authc'过滤器链。需要注意,所有表达式都是相对应用根路径(/)。
1. Order Matters!
URL定义的顺序很重要,对于传入的请求,它会按顺序依次匹配,最先匹配的即使用这个过滤器链。比如:
/account/** = ssl, authc /account/signup = anon
如果一个请求的路径是/account/signup/index.html(可被匿名用户访问),请求将不能被处理。因为/account/**匹配请求的路径,并将短路所有其他路径。
b. Filter Chain Definitions
等号右边是以逗号","分隔的过滤器定义,如果和请求路径匹配,将使用这些过滤器进行处理。它必须符合以下格式:
filter1[optional_config1], filter2[optional_config2], ..., filterN[optional_configN]
1. filterN是定义在[main]部分的过滤器。
2. [optional_configN]选填内容,用于特殊过滤器的配置,如果过滤器对URL没有特殊的配置,简写为filterN。
需要注意,过滤器的配置顺序即为调用顺序。当请求的执行条件不满足时,过滤器可以对response进行任何操作,比如执行跳转,返回HTTP错误码等。如果请求条件满足,会进入下一个过滤器,直至到最后的视图。
如果想自定义过滤器,继承org.apache.shiro.web.filter.PathMatchingFilter即可。
c. Available Filters
[main]定义的过滤器都可以在此处引用:
[main] ... myFilter = com.company.web.some.FilterImplementation myFilter.property1 = value1 ... [urls] ... /some/path/** = myFilter
3. Default Filters
对于web应用,Shiro会默认创建一些过滤器,并可以在[main]部分引用。
[main] ... # Notice how we didn't define the class for the FormAuthenticationFilter ('authc') - it is instantiated and available already: authc.loginUrl = /login.jsp ... [urls] ... # make sure the end-user is authenticated. If not, redirect to the 'authc.loginUrl' above, # and after successful authentication, redirect them back to the original account page they # were trying to view: /account/** = authc
默认的过滤器实例都是通过枚举DefaultFilter类定义的,枚举的name字段即为过滤器的名字:
Filter Name | Class |
anon | org.apache.shiro.web.filter.authc.AnonymousFilter |
authc | org.apache.shiro.web.filter.authc.FormAuthenticationFilter |
authcBasic | org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter |
logout | org.apache.shiro.web.filter.authc.LogoutFilter |
noSessionCreation | org.apache.shiro.web.filter.session.NoSessionCreationFilter |
perms | org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter |
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 |
4. Enabling and Disabling Filters
如果某个过滤器不使用的话,我们可以直接删除掉。Shiro1.2版本,通过父类OncePerRequestFilter支持,可以将不使用的过滤器关闭,那么请求就不会经过这个过滤器。Shiro默认的所有过滤器都继承了这个类,所以,这些过滤器都可以进行打开和关闭操作。
a. General Enabling/Disabling
OncePerRequestFilter可控制过滤器对请求的打开和关闭,也可基于每次请求进行打开和关闭。通过设置过滤器的enabled属性即可,默认为true:
[main] ... # configure Shiro's default 'ssl' filter to be disabled while testing: ssl.enabled = false [urls] ... /some/path = ssl, authc /another/path = ssl, roles[admin]
b. Request-specific Enabling/Disabling
OncePerRequestFilter实际上通过filter的isEnabled方法判断过滤器是否打开或关闭。该方法默认返回enabled属性值。如果你想基于请求条件决定其打开与否,可覆写isEnabled(request,response)方法。
c. Path-specific Enabling/Disabling
PathMatchingFilter可以根据配置的特殊路径进行过滤。就是说,可以依据配置的路径决定打开还是关闭过滤器。如果你想通过这种方式,需要覆写PathMatchingFilter的PathMatchingFilter isEnabled(request,response,path,pathConfig)方法。
5. Session Management
a. Servlet Container Sessions
在web环境下,ServletContainerSessionManager为SessionManager的实现类。它把所有session的管理全部委托给了容器,好的一面是,对于当前的session配置,完全有效。不好的一面是,session的行为依赖容器,比如说,你想做集群,如果测试用Jetty,但是生产环境是Tomcat,那么移植会很麻烦。
b. Servlet Container Session Timeout
如果使用容器支持的session管理,配置session的超时如下:
<session-config> <!-- web.xml expects the session timeout in minutes: --> <session-timeout>30</session-timeout> </session-config>
c. Native Sessions
如果想让session的配置和集群可在容器间移植,或者想定义session的特性,可以使用Shiro自带的session管理,即native session management。
d. DefaultWebSessionManager
如果想使用自带的session管理器,需要在ini文件中,将DefaultWebSessionManager实例配置到SecurityManager:
[main] ... sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager # configure properties (like session timeout) here if desired # Use the configured native session manager: securityManager.sessionManager = $sessionManager
当配置了DefaultWebSessionManager后,可以进行相应属性的设置。具体请参考 Session Management那节。
e. Native Session Timeout
对于自带session的超时设置,请查看Session Management那节。
f. Session Cookie
DefaultWebSessionManager有两个和web相关的属性:
sessionIdCookieEnabled (a boolean) sessionIdCookie, a Cookie instance
如果配置了Cookie实例,可通过sessionIdCookie属性将session ID设置到HTTP Cookie的头信息里。
g. Session Cookie Configuration
DefaultWebSessionManager的sessionIdCookie默认为SimpleCookie。可通过SimpleCookie属性设置任何值到HTTP Cookie里:
[main] ... securityManager.sessionManager.sessionIdCookie.domain = foo.com
默认使用JSESSIONID为cookie的名。在Servlet2.4和2.5环境下,支持HttpOnly。
h. Disabling the Session Cookie
如果不想使用cookie,可将sessionIdCookieEnabled设置为false:
[main] ... securityManager.sessionManager.sessionIdCookieEnabled = false
6. Remember Me Services
如果AuthenticationToken实现了org.apache.shiro.authc.RememberMeAuthenticationToken接口,就具有了rememberMe服务。RememberMeAuthenticationToken接口有一个方法:
boolean isRememberMe();
如果方法返回true,Shiro就会在本次会话中记住用户的标识。UsernamePasswordToken实现了这个接口并具有rememberMe功能。
6.1 Programmatic Support
对实现了org.apache.shiro.authc.RememberMeAuthenticationToken接口的类,只需要设置其setRememberMe发true即可。
UsernamePasswordToken token = new UsernamePasswordToken(username, password); token.setRememberMe(true); SecurityUtils.getSubject().login(token);
6.2 Form-based Login
对于web应用,过滤器authc的默认实现为FormAuthenticationFilter,它通过将rememberMe字段设置到请求参数里,以开启Remember Me服务:
[main] authc.loginUrl = /login.jsp [urls] # your login form page here: login.jsp = authc
在login.jsp页面中加一个复选框:
<form ...> Username: <input type="text" name="username"/> <br/> Password: <input type="password" name="password"/> ... <input type="checkbox" name="rememberMe" value="true"/>Remember Me? ... </form>
过滤器FormAuthenticationFilter默认使用username, password和rememberMe作为参数名。可通过如下设置重新定义参数名:
[main] ... authc.loginUrl = /whatever.jsp authc.usernameParam = somethingOtherThanUsername authc.passwordParam = somethingOtherThanPassword authc.rememberMeParam = somethingOtherThanRememberMe ...
6.3 Cookie configuration
可以通过RememberMeManager设置cookie相关的属性:
[main] ... securityManager.rememberMeManager.cookie.name = foo securityManager.rememberMeManager.cookie.maxAge = blah ...
6.4 Custom RememberMeManager
如果默认的RememberMeManager不能满足你的需求,可以自定义RememberMeManager 实现:
[main] ... rememberMeManager = com.my.impl.RememberMeManager securityManager.rememberMeManager = $rememberMeManager
7. JSP / GSP Tag Library
Shiro提供了JSP/GSP标签库,可以根据当前Subject的状态,控制JSP,JSTL,GSP的内容输出。
7.1 Tag Library Configuration
在页面中引入如下配置即可(TLD文件绑定在shiro-web.jar的META-INF/shiro.tld里):
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
7.2 The guest tag
guest标签中的内容只能被Guest用户所看到。(guest用户指没有登录或没有从Remember Me服务中获取标识身份的Subject)。
<shiro:guest> Hi there! Please <a href="login.jsp">Login</a> or <a href="signup.jsp">Signup</a> today! </shiro:guest>
7.3 The user tag
user标签和guest标签正好相反。user标签中的内容必须为登录或者从Remember Me服务中获取标识的用户所看到。需要注意,它和authenticated有语义上的不同。
<shiro:user> Welcome back John! Not John? Click <a href="login.jsp">here<a> to login. </shiro:user>
7.4 The authenticated tag
authenticated标签表示当前的用户必须被本次会话所认证过。
<shiro:authenticated> <a href="updateAccount.jsp">Update your contact information</a>. </shiro:authenticated>
7.5 The notAuthenticated tag
notAuthenticated标签语义正好和authenticated相反,表示当前用户还没有被当前会话所认证过:
<shiro:notAuthenticated> Please <a href="login.jsp">login</a> in order to update your credit card information. </shiro:notAuthenticated>
7.6 The principal tag
principal标签会输出当前用户(Subject)的标识:
Hello, <shiro:principal/>, how are you today?
如果当前用户没有任何表示信息,会输出toString方法值。相当于:
Hello, <%= SecurityUtils.getSubject().getPrincipal().toString() %>, how are you today?
7.7 Typed principal
principal标签默认输出subject.getPrincipal()的值,如果你不想输出主要的标识信息,可以通过查找标识的类型,输出其他值:
User ID: <principal type="java.lang.Integer"/>
等同于:
User ID: <%= SecurityUtils.getSubject().getPrincipals().oneByType(Integer.class).toString() %>
7.8 Principal property
如果标识的信息不单单是字符串,而是一个引用类型,又想使用引用类型的属性,可使用property属性:
Hello, <shiro:principal property="firstName"/>, how are you today?
等同于:
Hello, <%= SecurityUtils.getSubject().getPrincipal().getFirstName().toString() %>, how are you today?
还可以和type组合起来使用:
Hello, <shiro:principal type="com.foo.User" property="firstName"/>, how are you today?
等同于:
Hello, <%= SecurityUtils.getSubject().getPrincipals().oneByType(com.foo.User.class).getFirstName().toString() %>, how are you today?
7.9 The hasRole tag
hasRole标签表示当前的用户必须具有指定的角色:
<shiro:hasRole name="administrator"> <a href="admin.jsp">Administer the system</a> </shiro:hasRole>
7.10 The lacksRole tag
和hasRole相反,lacksRole标签表示当前用户不具有指定的角色:
<shiro:lacksRole name="administrator"> Sorry, you are not allowed to administer the system. </shiro:lacksRole>
7.11 The hasAnyRole tag
hasAnyRole标签表示,当前用户必须具有任意角色列表中的一项。角色列表使用逗号分隔:
<shiro:hasAnyRoles name="developer, project manager, administrator"> You are either a developer, project manager, or administrator. </shiro:lacksRole>
7.12 The hasPermission tag
hasPermission标签表示当前用户必须具有指定的权限:
<shiro:hasPermission name="user:create"> <a href="createUser.jsp">Create a new User</a> </shiro:hasPermission>
7.13 The lacksPermission tag
和hasPermission相反,lacksPermission标签表示,当前用户不具有指定的权限:
<shiro:lacksPermission name="user:delete"> Sorry, you are not allowed to delete user accounts. </shiro:hasPermission>
发表评论
-
Shiro Filters
2013-05-06 14:07 30091. Overview 对于web应用 ... -
Shiro Example
2013-04-23 16:11 17331. 说明: maven项目,基于Spring3.1,My ... -
Shiro用户手册-中文版pdf
2013-04-21 19:47 2091Apache Shiro用户手册中文版。 -
Shiro User Manual-Custom Subjects
2013-04-18 11:03 20451. Custom Subject Instances Sh ... -
Shiro User Manual-Testing
2013-04-18 10:59 36971. Test Setup 创建的Subject实例,必须要 ... -
Shiro User Manual-Architecture
2013-04-16 11:02 12551. Overview Shiro的设计目标是通过直观而简易 ... -
Shiro User Manual-Tutorial
2013-04-16 10:52 22491. Your First Apache Shiro Appl ... -
Shiro User Manual-Introduction
2013-04-16 10:42 11811. What is Apache Shiro? Shiro ... -
Shiro User Manual-Command Line Hasher
2013-04-19 11:49 17871. Overview Shiro1.2及其以 ... -
Shiro User Manual-Configuration
2013-04-16 11:19 18641. Configuration Shiro可以 ... -
Shiro User Manual-Integrating Into Spring
2013-04-18 11:23 20841. Overview Shiro的JavaBeans兼容性 ... -
Shiro User Manual-Caching
2013-04-18 10:52 18001. Caching Shiro团队了解 ... -
Shiro User Manual-Session Management
2013-04-17 22:41 68641. Session Management Shiro提供了 ... -
Shiro User Manual-Realms
2013-04-17 11:54 19211. Realms Realm是可以访问应用系统中数据,例如 ... -
Shiro User Manual-Authorization-Permissions
2013-04-17 09:31 19861. Wildcard Permissions 为了 ... -
Shiro User Manual-Authorization
2013-04-17 09:22 23241. Authorization Authorizatio ... -
Shiro User Manual-Authentication
2013-04-16 11:28 33211.Authentication Authenticatio ...
相关推荐
赠送jar包:shiro-web-1.3.2.jar; 赠送原API文档:shiro-web-1.3.2-javadoc.jar; 赠送源代码:shiro-web-1.3.2-sources.jar; 包含翻译后的API文档:shiro-web-1.3.2-javadoc-API文档-中文(简体)版.zip 对应...
shiro(shiro-all-1.8.0.jar)
shiro-web-1.2.0.jar
解决:升級1.7后附件中文路径报400错误的问题 压缩包中包含: shiro-cas-1.7.0.jar shiro-core-1.7.0.jar ...shiro-web-1.7.0.jar CustomShiroFilterFactoryBean.java spring-context-shiro.xml 修改说明.txt
赠送jar包:shiro-web-1.4.0.jar; 赠送原API文档:shiro-web-1.4.0-javadoc.jar; 赠送源代码:shiro-web-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-web-1.4.0.pom; 包含翻译后的API文档:shiro-web-...
java运行依赖jar包
赠送jar包:shiro-web-1.2.3.jar; 赠送原API文档:shiro-web-1.2.3-javadoc.jar; 赠送源代码:shiro-web-1.2.3-sources.jar; 赠送Maven依赖信息文件:shiro-web-1.2.3.pom; 包含翻译后的API文档:shiro-web-...
赠送jar包:shiro-core-1.4.0.jar; 赠送原API文档:shiro-core-1.4.0-javadoc.jar; 赠送源代码:shiro-core-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-core-1.4.0.pom; 包含翻译后的API文档:shiro-core...
赠送jar包:shiro-web-1.3.2.jar 赠送原API文档:shiro-web-1.3.2-javadoc.jar 赠送源代码:shiro-web-1.3.2-sources.jar 包含翻译后的API文档:shiro-web-1.3.2-javadoc-API文档-中文(简体)-英语-对照版.zip ...
赠送jar包:shiro-web-1.2.3.jar; 赠送原API文档:shiro-web-1.2.3-javadoc.jar; 赠送源代码:shiro-web-1.2.3-sources.jar; 赠送Maven依赖信息文件:shiro-web-1.2.3.pom; 包含翻译后的API文档:shiro-web-...
赠送jar包:shiro-web-1.4.0.jar; 赠送原API文档:shiro-web-1.4.0-javadoc.jar; 赠送源代码:shiro-web-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-web-1.4.0.pom; 包含翻译后的API文档:shiro-web-...
shiro-crypto-hash-1.7.1.jar,shiro-ehcache-1.7.1.jar,shiro-event-1.7.1.jar,shiro-guice-1.7.1.jar,shiro-hazelcast-1.7.1.jar,shiro-lang-1.7.1.jar,shiro-quartz-1.7.1.jar,shiro-spring-1.7.1.jar,shiro-web-...
shiro-web-1.2.4
标题提到的"shiro-attack-4.7.0-SNAPSHOT-all.zip"很可能是针对Apache Shiro的安全测试工具或者漏洞利用工具包,其主要目的是帮助开发者检测和防范Shiro框架相关的安全问题。 描述中的"序列化验证工具"可能是指该...
赠送jar包:shiro-config-core-1.4.0.jar; 赠送原API文档:shiro-config-core-1.4.0-javadoc.jar; 赠送源代码:shiro-config-core-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-config-core-1.4.0.pom; ...
赠送jar包:shiro-ehcache-1.4.0.jar; 赠送原API文档:shiro-ehcache-1.4.0-javadoc.jar; 赠送源代码:shiro-ehcache-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-ehcache-1.4.0.pom; 包含翻译后的API文档...
`shiro-1.7.1.zip`是一个包含Shiro框架不同组件的压缩包,主要用于web应用的安全控制。 1. **shiro-core-1.7.1.jar**: 这是Shiro的核心库,包含了基本的身份验证、授权和会话管理功能。它提供了一套API,开发者可以...
赠送jar包:shiro-crypto-core-1.4.0.jar; 赠送原API文档:shiro-crypto-core-1.4.0-javadoc.jar; 赠送源代码:shiro-crypto-core-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-crypto-core-1.4.0.pom; ...
赠送jar包:shiro-crypto-cipher-1.4.0.jar; 赠送原API文档:shiro-crypto-cipher-1.4.0-javadoc.jar; 赠送源代码:shiro-crypto-cipher-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-crypto-cipher-1.4.0....
赠送jar包:shiro-crypto-core-1.4.0.jar; 赠送原API文档:shiro-crypto-core-1.4.0-javadoc.jar; 赠送源代码:shiro-crypto-core-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-crypto-core-1.4.0.pom; ...