首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Spring Security 学习(四)

2013-02-18 
Spring Security 学习(4)security:intercept-url pattern/** accessROLE_USER,ROLE_ADMIN / ?接下

Spring Security 学习(4)
<security:intercept-url pattern="/**" access="ROLE_USER,ROLE_ADMIN" />

?

接下来完成这些功能:

1) 系统中除了login.jsp可以直接访问以外,其它的页面都需要权限才能进入

2) index.jsp页面 ROLE_USER 和ROLE_ADMIN都可以访问;

3) admin.jsp页面只有ROLE_ADMIN权限可以访问

?

1.创建admin.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body>I am admin Hhhhhhhh!@@....</body></html>

?并且在Index.jsp 中 添加 访问 admin.jsp 的超链接.

<a href="admin.jsp">amdin click。please。。</a>

?

2.?applicationContext.xml 配置

- <security:http auto-config="true" >- <!--  login-page 指定登录页面   -->   <security:form-login login-page="/login.jsp" /> - <!--  对于登录页面不进行拦截 至于后面的* 在访问loing.jsp时可能会传入一些参数   -->   <security:intercept-url pattern="/login.jsp*" filters="none" /> <!--设置admin.jsp访问权限-->  <security:intercept-url pattern="/admin.jsp*" access="ROLE_ADMIN" />   <security:intercept-url pattern="/**" access="ROLE_USER,ROLE_ADMIN" />   </security:http>

?

现在用User的用户去登录 点击 连接时访问将被拒绝, 使用 admin 这能正常访问. 被拒绝的页面显示不友好.

?

A)自定义?自定义访问被拒绝页面

?

1.创建?accessDenied.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>无权访问</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body> 您的访问被拒绝了.无权访问该资源.</body></html>

?

2.applicationContext.xml 配置

<!--  access-denied-page 指定被拒绝显示的页面    --> <security:http auto-config="true" access-denied-page="/accessDenied.jsp">- <!--  login-page 指定登录页面    -->   <security:form-login login-page="/login.jsp" /> - <!--  对于登录页面不进行拦截 至于后面的* 在访问loing.jsp时可能会传入一些参数   -->   <security:intercept-url pattern="/login.jsp*" filters="none" />   <security:intercept-url pattern="/admin.jsp*" access="ROLE_ADMIN" />   <security:intercept-url pattern="/**" access="ROLE_USER,ROLE_ADMIN" />   </security:http>

?

现在可以显示自定义拒绝页面了.

?

?B)SpringSecurity 标签?

对于上面用户登录时 该用户没有权限访问的内连 我们可以把它隐藏,有权限的才显示出来.那么用到了?

SpringSecurity 标签了.

?

1.index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";%><!--添加springsecurity标签库的引入的指令--><%@ taglib prefix="sec"uri="http://www.springframework.org/security/tags"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>首页</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body>这是首页 , 欢迎<!-- 显示用户登录的用户名--><sec:authentication property="name" />!<br><!--对当前用户的权限判断是否是ROLE_ADMIN,则显示标签体的内容--><sec:authorize ifAllGranted="ROLE_ADMIN"><a href="admin.jsp">amdin click。please。。</a></sec:authorize><br /><!--当前用户如果能访问/admin.jsp,则显示标签体的内容--><sec:authorize url="/admin.jsp"><a href="admin.jsp">进入admin.jsp页面</a></sec:authorize></body></html>

?sec:authorize 标签的属性:

A) ifAllGranted:只有当前用户拥有所有指定的权限时,才能显示标签体的内容 (相当于“与” 的关系)

B) ifAnyGranted:当前用户拥有指定的权限中的一个的时候,就能显示标签内部内容(相当于“或”的关系)

C) ifNotGranted:没有指定的权限的时候,显示标签体的内容 (相当于“非”的关系)

热点排行