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