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; } }
相关推荐
springsecurity是一个专注于为Java应用程序提供身份验证和授权的框架。与所有Spring项目一样,Spring安全性的真正威力在于它可以很容易地扩展以满足定制需求。 spring security 的核心功能主要包括: 认证 (你是...
所以安全非常重要,本系统基于springSecurity3.x的安全管理,并且使用目前最新报表技术(JasperReport5.1+Ireport5.1)完成交叉表及饼图设计,还给同学们介绍了基于JAX-WS的web应用,全面展示了技术和项目结合。...
A.3. ACL表 A.3.1. Hypersonic SQL A.3.1.1. PostgreSQL B. 安全命名空间 B.1. Web应用安全 - 元素 B.1.1. 属性 B.1.1.1. servlet-api-provision B.1.1.2. path-type B.1.1.3. lowercase-comparisons B....
1. Spring Security 11个步骤为应用程序添加安全防护 2. 历史与现状 自2003年出现的Spring扩展插件Acegi Security发展而来。...目前最新 版本为3.x,已成为Spring的一部分。 为J2EE企业应用程序提供可靠的安全性服务。
19.3.3. 读取授权 19.4. 实现类 19.4.1. LdapAuthenticator实现 19.4.1.1. 常用功能 19.4.1.2. BindAuthenticator 19.4.1.3. PasswordComparisonAuthenticator 19.4.1.4. 活动目录认证 19.4.2. 链接到...
除Java语言外,Spring还提供了您需要的所有内容,以在各种场景和体系结构中创建企业应用程序。 请阅读参考中的“ 部分以获取更完整的介绍。行为守则该项目受《。 通过参与,您将遵守此守则。 请向报告不可接受的...
Spring Security 参考 1 第一部分前言 15 1.入门 16 2.介绍 17 2.1什么是Spring Security? 17 2.2历史 19 2.3版本编号 20 2.4获得Spring安全 21 2.4.1使用Maven 21 Maven仓库 21 Spring框架 22 2.4.2 Gradle 23 ...
Spring Security-3.0.1 中文官方文档(翻译版) 这次发布的Spring Security-3.0.1 是一个bug fix 版,主要是对3.0 中存在的一些问题进 行修 正。文档中没有添加新功能的介绍,但是将之前拼写错误的一些类名进行...
spring boot 项目代码,直接启动,第一部分 点睛Spring 4.x 第1 章 Spring 基础 ..........................................2 1.1 Spring 概述 ............................................. 2 1.2 Spring 项目...
JavaEE开发的颠覆者 Spring Boot实战,多个地址免费下载,第一部分 点睛Spring 4.x 第1 章 Spring 基础 ..........................................2 1.1 Spring 概述 ................................................
Spring 4.0安全性示例李·维特森(Lee Vettleson)概述该项目的目的是提供使用Spring Security的Web应用程序的隔离示例。 它专门利用Active Directory服务进行身份验证和角色成员身份。依存关系 入门建立: > gradle...
而Spring Boot 是Spring 主推的基于“习惯优于配置”的原则,让你能够快速搭建应用的框架,从而使得Java EE 开发变得异常简单。, 《JavaEE开发的颠覆者: Spring Boot实战》从Spring 基础、Spring MVC 基础讲起,从而...
Spring Security 为基于J2EE企业应用软件提供了全面安全服务。特别是使用领先的J2EE解决方案-Spring框架开发的企业软件项目。人们使用Spring Security有很多种原因,不过通常吸引他们的是在J2EE Servlet规范或EJB...
基于Spring Boot 2.x的一站式前后端分离快速开发平台,XBoot 微信小程序+Uniapp 前端:Vue+iView Admin 后端:Spring Boot 2.x/Spring Security/JWT/JPA+Mybatis-Plus/Redis/Elasticsearch/Activiti 分布式限流/同步...
基于Spring Boot 2.0.X、Spring Cloud Finchley和Spring Cloud Alibaba 深度定制Spring Security真正实现了基于RBAC、jwt和oauth2的无状态统一权限认证的解决方案 提供应用管理,方便第三方系统接入 引入组件化的...
第6章 Spring 2.x AOP和AspectJ支持 第二部分 基础主题 第7章 Spring对JDBC的支持 第8章 Spring中的事务管理 第9章 Spring对ORM的支持 第10章 Spring MVC框架 第11章 整合Spring...
第6章 Spring 2.x AOP和AspectJ支持 第二部分 基础主题 第7章 Spring对JDBC的支持 第8章 Spring中的事务管理 第9章 Spring对ORM的支持 第10章 Spring MVC框架 第11章 整合Spring...
第6章 Spring 2.x AOP和AspectJ支持 第二部分 基础主题 第7章 Spring对JDBC的支持 第8章 Spring中的事务管理 第9章 Spring对ORM的支持 第10章 Spring MVC框架 第11章 整合Spring与其他...
基于SpringBoot2.X 的企业级开发脚手架 核心技术采用Spring、SpringSecurity 、MyBatis 的轻量企业级开发脚手架
SpringSAML Spring SAML Extension允许在Spring应用程序中无缝包含SAML 2.0 Service Provider功能。 可以使用在身份提供者模式下支持SAML 2.0的所有产品(例如ADFS 2.0,Shibboleth,OpenAM / OpenSSO,Ping ...