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

Spring3.x Security 简单应用

    博客分类:
  • java
 
阅读更多

Security 配置文件:

<?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.1.xsd">
	<!-- 不需要权限控制的资源 -->
	<http pattern="/favicon.ico" security="none" />
	......
	<!-- 404页面 -->
	<http pattern="/404.html" security="none" />
	<!-- 过滤器链 -->
	<http auto-config="true" access-decision-manager-ref="accessDecisionManager"
		disable-url-rewriting="true" request-matcher="ant">

		<intercept-url pattern="/**" access="IS_AUTHENTICATED_REMEMBERED" />

		<!-- 登录控制 -->
		<form-login login-page="/login/login.do"
			login-processing-url="/doLogin.do"
			authentication-success-handler-ref="loginSuccessHandler"
			authentication-failure-handler-ref="loginFailureHandler" />

		<!-- 退出链接 -->
		<logout logout-url="/logout.do" />

		<!-- 控制同时只能有一个相同的用户登录 -->
		<session-management invalid-session-url="/login/login.do">
			<concurrency-control max-sessions="1"
				error-if-maximum-exceeded="false" expired-url="/login/login.do" />
		</session-management>

		<!-- 记住我 -->
		<remember-me services-ref="rememberMeServices" key="rocks"
			use-secure-cookie="false" authentication-success-handler-ref="rememberMeSuccessHandler" />

		<!-- 自定义Filter -->
		<custom-filter ref="urlAuthenticationFilter" after="LAST" />

	</http>

	<!-- 自定义Filter实现 -->
	<beans:bean id="urlAuthenticationFilter" class="com.xxx.security.UrlAuthenticationFilter" />
	<!-- 登录成功处理 -->
	<beans:bean id="loginSuccessHandler" class="com.xxx.security.LoginSuccessHandler" />
	<!-- 登录失败处理 -->
	<beans:bean id="loginFailureHandler" class="com.xxx.security.LoginFailureHandler" />
	<!-- 通过记住我登录成功处理 -->
	<beans:bean id="rememberMeSuccessHandler" class="com.xxx.security.RememberMeSuccessHandler" />
	<!-- 密码加密方式 -->
	<beans:bean id="passwordEncoder"
		class="org.springframework.security.authentication.encoding.Md5PasswordEncoder" />
	<!-- 权限控制 -->
	<authentication-manager alias="authenticationManager"
		erase-credentials="false">
		<authentication-provider user-service-ref="customerDetailsBiz">
			<password-encoder ref="passwordEncoder">
			</password-encoder>
		</authentication-provider>
	</authentication-manager>
	<!-- 记住我登录流程 -->
	<beans:bean id="rememberMeServices" class="com.xxx.customer.biz.CustomerRememberMeBiz">
		<beans:property name="userDetailsService" ref="customerDetailsBiz" />
		<beans:property name="key" value="rocks" />
	</beans:bean>
	<!-- Spring UserDetailsService接口实现类 主要是从数据库查找准备登录的用户 -->
	<beans:bean id="customerDetailsBiz" class="com.xxx.customer.biz.CustomerDetailsBiz" />
	<!-- 投票器 -->
	<beans:bean id="accessDecisionManager"
		class="org.springframework.security.access.vote.AffirmativeBased">
		<beans:property name="allowIfAllAbstainDecisions"
			value="false" />
		<beans:property name="decisionVoters">
			<beans:list>
				<beans:bean
					class="org.springframework.security.access.vote.AuthenticatedVoter" />
			</beans:list>
		</beans:property>
	</beans:bean>

</beans:beans>

 登录成功处理:

LoginSuccessHandler 

package com.xxx.security;

/**
 * 用户登录成功后处理
 * 
 * @author Theodore
 * 
 */
public class LoginSuccessHandler implements AuthenticationSuccessHandler {
	private static final Log log = LogFactory.getLog(LoginSuccessHandler.class);

	@Override
	public void onAuthenticationSuccess(HttpServletRequest request,
			HttpServletResponse response, Authentication auth)
			throws IOException, ServletException {
		log.debug("...LoginSuccessHandler@onAuthenticationSuccess...");

		// 登录日志之类
		
	}

	/**
	 * 获取客户端IP
	 * 
	 * @param request
	 * @return
	 */
	public String getIpAddr(HttpServletRequest request) {
		String ip = request.getHeader("x-forwarded-for");
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("Proxy-Client-IP");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("WL-Proxy-Client-IP");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getRemoteAddr();
		}
		log.debug("ip:::" + ip);
		return ip;
	}
}

 登录失败处理:

loginFailureHandler

package com.xxx.security;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 登录失败逻辑处理
 * 
 * @author Theodore
 * 
 */
public class LoginFailureHandler implements AuthenticationFailureHandler {
	// private static final Log log =
	// LogFactory.getLog(LoginFailureHandler.class);

	@Override
	public void onAuthenticationFailure(HttpServletRequest request,
			HttpServletResponse response, AuthenticationException exception)
			throws IOException, ServletException {

		//登录失败处理,例如向客户端输出失败信息

	}

}

 记住我:

RememberMeSuccessHandler

package com.xxx.security;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


/**
 * 用户登录成功后处理
 * 
 * @author Theodore
 * 
 */
public class RememberMeSuccessHandler implements AuthenticationSuccessHandler {
	private static final Log log = LogFactory
			.getLog(RememberMeSuccessHandler.class);

	@Override
	public void onAuthenticationSuccess(HttpServletRequest request,
			HttpServletResponse response, Authentication auth)
			throws IOException, ServletException {
		log.debug("...RememberMeSuccessHandler@onAuthenticationSuccess...");

		// 登录日志
		
	}

	
	/**
	 * 获取客户端IP
	 * 
	 * @param request
	 * @return
	 */
	public String getIpAddr(HttpServletRequest request) {
		String ip = request.getHeader("x-forwarded-for");
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("Proxy-Client-IP");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("WL-Proxy-Client-IP");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getRemoteAddr();
		}
		return ip;
	}
}

 CustomerDetailsBiz

import java.util.List;


/**
 * 查找指定用户

 * @author Theodore
 * 
 */
public class CustomerDetailsBiz extends BaseBiz<Customer, CustomerDao>
		implements UserDetailsService {
	private static final Log log = LogFactory.getLog(CustomerDetailsBiz.class);

	@Resource
	private CustomerBiz xxxBiz;

	/**
	 * 
	 * <p>
	 * 根据后台用户名查找用户并加载用户的详细信息
	 * </p>
	 * 
	 * @param
	 * @return UserDetails
	 * @throws
	 */
	@Override
	public UserDetails loadUserByUsername(String userId)
			throws UsernameNotFoundException {

		Customer customer =  xxxBiz.getCustomer(userId);
		
		if (customer != null) {
			//如果该用户可以登录

		} else {
                        //如果没有找到该用户,需要创建一个空对象
			customer = new Customer();
		}

		return customer;
	}

}

 

分享到:
评论

相关推荐

    《Spring 3.x 企业应用开发实战》lib包

    《Spring 3.x 企业应用开发实战》lib包是一个针对Spring框架3.x版本的实践教程配套资源,其中包含了在实际项目开发中可能用到的各种库文件。这些库文件是Spring框架与其他外部组件交互的关键,它们可以帮助开发者...

    精通Spring4.x+企业应用开发实战 配套光盘(源码+资源)

    《精通Spring4.x+企业应用开发实战》这本书的配套光盘包含了丰富的源码和资源,旨在帮助读者深入理解和掌握Spring4.x框架在实际企业开发中的应用。Spring4.x是Java领域中最受欢迎的轻量级开源框架之一,它以其模块化...

    《Spring 3.x企业应用开发实战》PDF

    《Spring 3.x企业应用开发实战》是一本深入讲解Spring框架在企业级应用程序开发中的实践指南。这本书专注于Spring 3.x版本,该版本是Spring框架发展史上的一个重要里程碑,引入了许多新特性和改进,旨在提升开发效率...

    精通Spring4.x企业应用开发实战pdf+源码

    《精通Spring4.x企业应用开发实战》是一本深入解析Spring框架在企业级应用中的实践指南。这本书涵盖了Spring框架的核心概念、重要特性和实际应用,旨在帮助开发者熟练掌握Spring4.x版本的各种开发技能,以提高软件...

    Spring3.X企业应用开发实战pdf扫描版+源码光盘

    10. **Spring Security**:Spring3.X集成了Spring Security,为应用程序提供了全面的安全管理解决方案,包括认证、授权和访问控制。 源码光盘包含的实例代码可以帮助读者更好地理解这些概念和用法,通过实际操作...

    spring4.x________

    Spring 4.x 是一个重要的Java框架,专注于简化企业级应用程序开发。这个版本的Spring框架引入了许多新特性,改进和优化,以适应不断变化的开发需求和技术趋势。在本文中,我们将深入探讨Spring 4.x的核心特性、优势...

    spring boot3.x结合spring security最新版实现jwt登录验证

    本教程将详细讲解如何在Spring Boot 3.x版本中结合Spring Security的最新版实现JWT(JSON Web Token)登录验证。 首先,让我们了解JWT。JWT是一种轻量级的身份认证和授权机制,它以JSON对象的形式在客户端和服务器...

    Spring3.x企业应用开发实战书中源码

    10. **Spring Security**:Spring3.x还提供了Spring Security框架,用于实现企业级的安全管理,包括身份验证、授权等功能,保护应用程序免受未经授权的访问。 这个压缩包中的源代码涵盖了以上所有知识点的实践示例...

    Spring 3.x 企业应用开发实战 pdf

    根据提供的文件信息,可以推断出您所询问的是关于《Spring 3.x 企业应用开发实战》这本书的内容。该书是关于Spring框架的一个实用指南,主要面向那些需要在企业级环境中使用Spring进行应用程序开发的Java开发者。...

    精通Spring+4.x++企业应用开发实战

    根据提供的文件信息,本次将重点围绕“精通Spring 4.x企业应用开发实战”这一主题进行深入探讨,并结合标题、描述及部分提及的内容展开详细的讲解。 ### Spring框架简介 Spring框架是一个开源的应用框架,由Rod ...

    精通Spring 4.x 企业应用开发实战 + 源码

    《精通Spring 4.x 企业应用开发实战》是一本深入探讨Spring框架在企业级应用中的实践与源码解析的书籍。Spring作为Java领域最流行的开源框架之一,它为开发者提供了全面的解决方案,包括依赖注入、面向切面编程、...

    [Spring.3.x企业应用开发实战].陈雄华 完整版

    《Spring 3.x企业应用开发实战》是一本深入讲解Spring框架在实际企业级项目中应用的书籍,由陈雄华撰写。这本书全面覆盖了Spring 3.x版本的关键特性和最佳实践,旨在帮助开发者掌握如何利用Spring构建高效、稳定且可...

    Spring 3.x企业应用开发实战.pdf

    《Spring 3.x企业应用开发实战》这本书是针对Spring框架3.x版本的详细指南,旨在帮助开发者深入理解和熟练运用Spring框架进行企业级应用的开发。Spring作为Java领域中最流行的轻量级框架之一,其强大的功能和灵活性...

    Spring 4.X:企业应用开发实战精通 完整版

    《Spring 4.x:企业应用开发实战精通》是Spring框架在4.x版本时期的经典实战教程。这本书深入浅出地介绍了如何使用Spring框架构建高效、稳定的企业级应用程序。Spring作为Java领域的重要框架,以其模块化、松耦合和...

    Spring 3.x企业应用开发实战光盘源码part02

    在本资源中,"Spring 3.x企业应用开发实战光盘源码part02" 提供了Spring框架3.x版本的企业级应用开发实例代码。这部分是整个教程源码的第二部分,暗示着可能存在一个第一部分,可能包含了基础的设置和初始化工作。...

    spring4.X企业开发应用实战

    《Spring 4.x 企业开发应用实战》这本书深入探讨了Spring框架在企业级应用程序开发中的应用,涵盖了Spring 4.x版本的重要特性和最佳实践。Spring作为Java生态系统中最受欢迎的轻量级框架,它提供了全面的解决方案,...

    Spring3.x企业应用开发实战光盘源码

    《Spring3.x企业应用开发实战》是一本深入探讨Spring框架在企业级开发中的应用书籍,其光盘源码是学习过程中宝贵的参考资料。Spring框架作为Java领域最流行的应用框架之一,以其强大的依赖注入(DI)和面向切面编程...

    精通Spring 4.X:企业应用开发实战精通 (陈雄华) 完整版

    《精通Spring 4.X:企业应用开发实战精通》是一本由陈雄华编著的书籍,专注于Spring 4.x框架的深度解析与实践应用。Spring作为Java领域最流行的应用框架,其4.x版本在功能、性能和易用性上都有显著提升。这本书详细...

    spring4.x.x中文文档

    安全性方面,Spring Security 4.x.x与Spring 4.x.x紧密集成,提供了全面的身份验证和授权功能,包括OAuth2支持,保护了Web应用和RESTful API的安全。 总的来说,Spring 4.x.x中文文档将涵盖这些关键领域的详细内容...

    spring3.x企业应用开发实战光盘源码

    《Spring 3.x 企业应用开发实战》一书的源码是针对Spring框架3.x版本进行深入学习和实践的重要资源。Spring是一个广泛使用的Java企业级应用程序框架,它提供了丰富的功能,包括依赖注入、面向切面编程、事务管理、...

Global site tag (gtag.js) - Google Analytics