对于上篇遗留的问题暂时放一放.
第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:没有指定的权限的时候,显示标签体的内容 (相当于“非”的关系)
相关推荐
在"springsecurity学习笔记"中,你可能会涉及以下主题: - Spring Security的基本配置,包括web安全配置和全局安全配置。 - 如何自定义认证和授权流程,比如实现自定义的AuthenticationProvider和...
Spring Security是一个功能强大且高度可定制的身份验证和授权框架,专门用于保护Java应用程序的安全性。它构建在Spring Framework基础之上,提供了全面的安全解决方案,包括身份验证、授权、攻击防护等功能。 Spring...
SpringSecurity是Java开发中用于构建安全Web应用的框架,它提供了强大的身份验证、...在学习过程中,分析提供的源代码和示例将有助于深入理解SpringSecurity的工作原理,并能帮助你在实际项目中有效地应用这些知识。
spring security方面的学习资料,包含:Spring+Security+3+与+CAS单点登录配置;Spring+Security3中文教程;Spring-Security安全权限管理手册;Spring+Security文库;还有一个学习笔记!
Spring Security 是一个强大的安全框架,主要用于Java应用的安全管理,它为Web应用和企业级应用提供了全面的...通过学习这些文档,开发者可以更好地理解Spring Security的工作原理,从而更有效地实现应用的安全控制。
Spring Security的学习过程可以分为入门、进阶和高级三个阶段。入门阶段主要是了解Spring Security的基本概念和配置方法。进阶阶段需要深入学习如何定制认证和授权流程、如何集成各种认证方式以及如何在实际项目中...
"springsecurity-namespace"可能指的是Spring Security的XML命名空间配置。在Spring Security的早期版本中,使用XML配置是最常见的实践。例如,你可能会看到以下片段: ```xml **" access="hasRole('ROLE_ADMIN')...
首先,Spring_Security-3.0.1_中文官方文档(翻译版).pdf是学习SpringSecurity的重要资源,它包含详细的框架介绍、配置指南和使用示例。这份文档会帮助我们理解SpringSecurity的基础架构,如安全上下文、过滤器链和...
4. **spring-security-acl**: - `spring-security-acl-4.0.0.CI-SNAPSHOT-javadoc.jar`:访问控制列表模块的Java文档,涉及对象级别的权限控制。 在Spring Security 4.0.0中,这些jar包一起工作,提供了一套完整...
Spring Security 是一个强大的安全框架,用于为Java应用提供身份验证和授权服务。在这个完整的项目实例中...通过学习和实践这个项目,开发者能够深入理解Spring Security的工作原理,从而更有效地保护自己的Java应用。
4. **SpringSecurity认证流程** - 用户提交登录请求,请求被SpringSecurity的过滤器拦截。 - 认证过滤器(如`UsernamePasswordAuthenticationFilter`)提取用户名和密码,并调用`UserDetailsService`进行验证。 -...
4. **会话管理**:Spring Security可以实现会话固定保护,防止会话劫持和会话超时策略。同时,它还可以控制并发会话,防止同一用户同时登录多个设备。 5. **CSRF防护**:为了防止跨站请求伪造攻击,Spring Security...
4. **会话管理(Session Management)**:Spring Security提供了强大的会话管理功能,可以限制同一用户同时在线的数量,检测会话劫持和会话固定攻击,并能实现会话超时策略。 5. **CSRF保护(Cross-Site Request ...
4. **支持Spring MVC和Spring Boot**:Spring Security可以无缝集成到Spring MVC和Spring Boot应用中,提供开箱即用的安全特性。 5. **OAuth2支持**:对于现代Web应用,Spring Security还提供了OAuth2的支持,用于...
4. 弹性安全策略:Spring Security的Filter Chain机制允许开发者自定义过滤器链,实现复杂的安全策略。 四、学习资源与实践 提供的"Spring Security 3.1.pdf"文档是英文版的学习资料,对于深入理解Spring Security...
Spring Security OAuth2.0学习笔记 什么是认证、授权、会话。 Java Servlet为支持http会话做了哪些事儿。 基于session认证机制的运作流程。 基于token认证机制的运作流程。 理解Spring Security的工作原理,Spring ...
【Spring Security 学习总结】 Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于保护基于 Java 的应用程序。本学习总结文档主要针对初学者,旨在剖析一个不安全的应用程序并阐述如何通过 ...
4. **会话管理**:Spring Security提供了会话管理功能,如会话固定保护、会话超时和并发会话控制。这在防止会话劫持和会话固定攻击方面至关重要。 5. **CSRF(跨站请求伪造)防护**:Spring Security 3.1默认提供了...