MyException - 我的异常网
当前位置:我的异常网» 编程 » Spring Security 学习(四)

Spring Security 学习(四)

www.MyException.Cn  网友分享于:2013-02-19  浏览:11次
Spring Security 学习(4)

对于上篇遗留的问题暂时放一放.

第4篇主要内容:

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

B).SpringSecurity 标签

 

当我们使用User 登录账户是能成功访问 Index.jsp 使用admin 登录时就被拒绝了,原因是并没有配置admin的访问权限.

在 applicationContext.xml 配置 ,admin就能正常访问 index.jsp .

<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:没有指定的权限的时候,显示标签体的内容 (相当于“非”的关系)

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有