Spring Security Taglib

来源:互联网 发布:马士兵网上商城源码 编辑:程序博客网 时间:2024/06/10 08:23

版本:4.0.4.RELEASE

Spring Security 有对Jsp标签的支持的标签库。其中一共定义了5个标签:authorize、authentication、accesscontrollist、csrfInput和csrfMetaTags。其中authentication标签是用来代表当前Authentication对象的,我们可以利用它来展示当前Authentication对象的相关信息。authorize和accesscontrollist两个标签是用于权限控制的,可以利用它们来包裹需要保护的内容,通常是超链接和按钮。csrf两个是解决 跨站请求伪造的标签。

<dependency>    <groupId>org.springframework.security</groupId>    <artifactId>spring-security-taglibs</artifactId></dependency>添加依赖后,打开 spring-security-taglibs-4.0.4.RELEASE.jar 中的 META-INF/security.tld<short-name>security</short-name><uri>http://www.springframework.org/security/tags</uri>在JSP页面中引入<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>

authorize

authorize是用来判断权限的,通过判断用户是否具有对应的权限而控制其所包含内容的显示,其可以指定如下属性。

  • access:使用表达式来判断权限,当表达式的返回结果为true时表示拥有对应的权限。
  • url:url表示如果用户拥有访问指定url的权限即表示可以显示authorize标签包含的内容。
  • method:method属性是配合url属性一起使用的,表示用户应当具有指定url指定method访问的权限,method的默认值为GET,可选值为http请求的7种方法。
  • var:用于指定将权限鉴定的结果存放在pageContext的哪个属性中。该属性的主要作用是对于在同一页面的多个地方具有相同权限鉴定时,我们只需要定义一次,然后将鉴定结果以var指定的属性名存放在pageContext中,其它地方可以直接使用之前的鉴定结果。

示例:

<sec:authorize access="hasRole('ADMIN')">    <a href="${ctx}admin">ADMIN</a></sec:authorize><sec:authorize url="/admin">    <a href="${ctx}admin">ADMIN</a></sec:authorize><sec:authorize url="/admin" method="POST">    <a href="${ctx}admin">ADMIN</a></sec:authorize><!--限制访问方法是通过http元素下的intercept-url元素的method属性来指定的,如:<security:intercept-url pattern="/admin" access="ROLE_ADMIN" method="POST" />  --><sec:authorize access="isFullyAuthenticated()" var="isFullyAuthenticated">通过登录界面进行登录的用户才能看到A。<br/></sec:authorize>上述权限的鉴定结果是:${isFullyAuthenticated}<br/><%if((Boolean)pageContext.getAttribute("isFullyAuthenticated")) {%>过登录界面进行登录的用户才能看到B。<%}%>

各属性对应的优先级

  • access具有最高的优先级,如果指定了access属性,那么将以access属性指定的表达式来鉴定当前用户是否有权限。此时其它属性都将被忽略。
  • 如果没有指定access属性,那么url属性将具有最高优先级,此时将直接通过url属性和method属性(默认为GET)来鉴定当前用户是否有权限。

authentication

authentication标签用来代表当前Authentication对象,主要用于获取当前Authentication的相关信息。authentication标签的主要属性是property属性,我们可以通过它来获取当前Authentication对象的相关信息。如通常我们的Authentication对象中存放的principle是一个UserDetails对象,所以我们可以通过如下的方式来获取当前用户的用户名。

<sec:authentication property="principal.username"/> 当然,我们也可以直接通过Authentication的name属性来获取其用户名。<sec:authentication property="name"/>

property属性只允许指定Authentication所拥有的属性,可以进行属性的级联获取,如“principle.username”,不允许直接通过方法进行调用。

除了property属性之外,authentication还可以指定的属性有:var、scope和htmlScape。

  • var:var属性用于指定一个属性名,这样当获取到了authentication的相关信息后会将其以var指定的属性名进行存放,默认是存放在pageConext中。可以通过scope属性进行指定。此外,当指定了var属性后,authentication标签不会将获取到的信息在页面上进行展示,如需展示用户应该通过var指定的属性进行展示,或去掉var属性。
  • scope:与var属性一起使用,用于指定存放获取的结果的属性名的作用范围,默认我pageContext。Jsp中拥有的作用范围都进行进行指定。
  • htmlScape:表示是否需要将html进行转义。默认为true。
<!-- 将获取到的用户名以属性名username存放在session中 --><sec:authentication property="principal.username" scope="session" var="username"/>${username}

accesscontrollist

//TODO

csrfInput 和 csrfMetaTags

CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

这两个标签没有任何属性参数,直接引用即可。区别是,一个在表单内,一个在Meta中。

<sec:csrfMetaTags /><sec:csrfInput />
1 0
原创粉丝点击