`
laodaobazi
  • 浏览: 276916 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring Security再次体验

阅读更多

上一个例子只是初探了一下Spring Security的用法,简单的不能再简单的。今天进一步去体验Spring Security的用法,丰富之前的例子。

在上一个demo的基础上改进之处:

1、使用自己编写的登录页面;

2、将明文密码进行MD5加密;

3、进行国际化;

4、是用自己定义的页面替代浏览器403无权访问提示;

5、设置session过期跳转页面;

6、防止多次登录;

 

自己定义的登陆页面如下:login.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>login</title>
		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
	</head>
	<body onload='document.f.j_username.focus();'>
		<h3>
			${sessionScope.SPRING_SECURITY_LAST_EXCEPTION.message}
			<br/>
			用户登录
		</h3>
		<form name='f' action='<%=request.getContextPath() %>/j_spring_security_check'
			method='POST'>
			<table>
				<tr>
					<td>User:</td>
					<td><input type='text' name='j_username' value=''></td>
				</tr>
				<tr>
					<td>Password:</td>
					<td><input type='password' name='j_password' /></td>
				</tr>
				<tr>
					<td colspan='2'>
						<input name="submit" type="submit" />
					</td>
				</tr>
				<tr>
					<td colspan='2'>
						<input name="reset" type="reset" />
					</td>
				</tr>
			</table>
		</form>
	</body>
</html>

 

自定义无权访问页面accessDenied.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>无权访问</title>
  </head>
  <body>
    您的访问被拒绝,您无权访问该资源
  </body>
</html>

 

自定义Session过期页面sessionTimeout.jsp

<%@ page language="java" pageEncoding="utf-8"%>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <title>用户登录已超时</title>
    <style type="text/css">
	    body{
			text-align: center;
		}
		#sessionOut {
            margin-top: 50px;
			padding: 15px 50px;
			width: 500px;
			border: 2px solid green;
			background-color: yellow;
			text-align: center;
		}
		a{
			font-weight:bold;
			font-family:"宋体";
			font-size:18px;
		}
    </style>
  </head>
<body>
	<div id ="sessionOut">
		您长时间未操作系统,为确保您的资料及数据信息安全,
		系统自动超时退出,请重新<a href="http://<%=request.getRemoteAddr()%>:<%= request.getServerPort()%>/security1">登录</a>系统!
	</div>
</body>
<script type="text/javascript">
if (self != top){
	window.top.location = window.location;
}
</script>
</html>

 

 

修改配置文件applicationContext.xml达到以上功能:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
	xmlns:beans="http://www.springframework.org/schema/beans" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
						http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/security 
                        http://www.springframework.org/schema/security/spring-security-3.0.xsd">
	<!-- 指定被拒绝的页面 -->
	<http auto-config='true' access-denied-page="/accessDenied.jsp">
		<!--
			login-page表示用户登陆时显示我们自定义的login.jsp
			authentication-failure-url表示用户登陆失败时,跳转到哪个页面,并添加一个error=true参数作为登陆失败的标示
			default-target-url表示登陆成功时,跳转到哪个页面
		-->
		<form-login login-page="/login.jsp" 
			authentication-failure-url="/login.jsp?error=true" 
			default-target-url="/index.jsp" 
		/>
		<!--登录页面不进行过滤,后面加一个*那是因为请求页面后面会带参数-->
		<intercept-url pattern="/login.jsp*" filters="none"/>
		<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
		<intercept-url pattern="/**" access="ROLE_USER" />
		
		<!-- 检测失效的sessionId,超时时定位到另外一个URL -->
		<session-management invalid-session-url="/sessionTimeout.jsp" >
			 <!-- 
				防止第二次登录
				如果想让第一次登录失效第二次登录启用则不要配置error-if-maximum-exceeded="true"
			  -->
			<concurrency-control max-sessions="1" error-if-maximum-exceeded="true"/>
		</session-management>
	</http>
	<authentication-manager>
		<authentication-provider>
			<!-- 加密用户的密码 -->
			<password-encoder hash="md5"/>
			<user-service>
				<!--
					<user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />
					<user name="user" password="user" authorities="ROLE_USER" />
				-->
				<user name="admin" password="21232f297a57a5a743894a0e4a801fc3" authorities="ROLE_USER, ROLE_ADMIN" />
				<user name="user" password="ee11cbb19052e40b07aac0ca060c23ee" authorities="ROLE_USER" />
			</user-service>
		</authentication-provider>
	</authentication-manager>
	
	<!-- 国际化 -->
	<beans:bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
	  <!-- 如果不加载自己的国际化文件,去加载 Security 内部的国际化文件classpath:org/springframework/security/messages_zh_CN -->
	  <beans:property name="basename" value="classpath:messages_zh_CN"/>
	</beans:bean>

</beans:beans>

 上面每个新添加的功能配置多进行了相应的注释说明。

分享到:
评论

相关推荐

    Spring Security 资料合集

    - Spring Security 提供了Remember-Me服务,允许用户在一段时间内无需再次输入密码即可访问应用。这通过存储在cookie中的令牌实现,增强了用户体验。 5. **CSRF保护**: - 默认情况下,Spring Security 开启了跨...

    SpringSecurity中文文档.zip

    它还集成了Remember Me服务,允许用户在一定时间内无需再次登录,提升用户体验。 对于开发企业级应用,SpringSecurity的集成能力非常重要。它可以无缝对接Spring Boot、Spring Cloud等现代开发框架,使得在分布式...

    SpringSecurity源码

    8. **Remember-Me服务**:允许用户在一段时间内无须再次输入登录凭据,提高用户体验。 9. **自定义扩展**:SpringSecurity的设计允许开发者根据需求定制安全行为,如自定义认证、授权策略,以及创建新的安全过滤器...

    初识 Spring Security - v1.1.pdf

    ### 初识 Spring Security #### 一、Spring Security 概述 **Spring Security**是一种广泛应用于Java企业级项目中的安全框架,它基于Spring AOP(面向切面编程)和Servlet过滤器来提供全面的安全解决方案。该框架...

    SpringSecurity+MVC入门Demo

    通过这个"SpringSecurity+MVC入门Demo",初学者可以了解如何在Spring MVC应用中集成Spring Security,实现用户认证和授权的基本流程,为后续深入学习和实践打下基础。这个Demo应该包含了配置文件、控制器、视图和...

    spring mvc 和spring security自定义登录

    Spring MVC和Spring Security是两个非常流行的Java框架,它们分别用于构建强大的MVC(Model-View-Controller)应用和提供强大的安全防护。本文将深入探讨如何结合Spring MVC和Spring Security来实现自定义登录功能。...

    Spring Security集成CAS客户端实例

    总之,Spring Security和CAS的结合使得企业级应用能够实现高效且安全的单点登录,减少了用户认证的繁琐操作,提高了用户体验。而通过理解并实践这个示例,开发者可以更好地掌握这两种强大的安全框架。

    Spring-Security2.0 和 3.0中文文档

    在这两个版本中,Spring Security 提供了Remember Me服务,允许用户在登录后的一段时间内无需再次输入凭证。这提高了用户体验,但同时也需要谨慎处理,防止安全漏洞。 4. **Filter Chain**: Spring Security ...

    springsecurity3.1官方手册(含中文版-英文版)

    6. **Remember-Me服务**:Spring Security提供了Remember-Me服务,允许用户在一段时间内无须再次登录,增强了用户体验。 7. **集成Spring MVC和Spring WebFlow**:Spring Security能够无缝集成到Spring MVC和Spring...

    springSecurity3

    4. **Remember Me**:Spring Security的Remember Me服务允许用户在一段时间内无需再次登录。它通过存储用户的持久化令牌来实现这一功能,增加了用户体验。 5. **Session Management**: Spring Security提供了会话...

    spring security oauth2 单点登录

    **Spring Security OAuth2 单点登录详解** Spring Security OAuth2 是一个强大的安全框架,用于构建安全的、基于授权的Web应用程序。它提供了多种安全机制,包括认证、授权、单点登录(Single Sign-On, SSO)等。在...

    spring security 3.0x remember-me 免登陆

    当用户下次访问时,如果cookie存在且未过期,Spring Security会自动处理认证,使得用户无需再次输入凭据。 注意,虽然"remember-me"功能增强了用户体验,但也可能带来安全性问题,因为它降低了用户账户的保护级别。...

    spring security oauth2 实现jwt sso

    Spring Security OAuth2 与 JWT 实现的SSO详解 在当今的互联网应用中,单点登录(Single Sign-On,简称SSO)已经成为一种常见的身份验证机制,它允许用户在一个系统中登录后,无需再次登录就能访问其他关联系统。在...

    spring-security-3.0.3 jar包( 含源码)

    6. **记住我功能**:Spring Security允许用户在登录后一段时间内无需再次输入用户名和密码,提高了用户体验。 7. **国际化支持**:Spring Security支持多语言环境,可以方便地切换不同的语言显示错误消息和提示信息...

    springsecurity2x.pdf

    在 "springsecurity2x.pdf" 中,主要讨论的是Spring Security 2.x版本的相关内容。 1. **Spring Security简介** - **什么是Spring Security?** 它是一个全面的安全框架,提供了认证(Authentication)和授权...

    Spring Boot和Spring Security4最新整合实例

    Spring Boot 和 Spring Security 整合实例详解 Spring Boot 是一个快速开发框架,它简化了 Spring 应用的初始搭建以及开发过程。而 Spring Security 是一个强大的安全框架,用于处理身份认证(Authentication)和...

Global site tag (gtag.js) - Google Analytics