- 浏览: 263751 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (87)
- Java (6)
- Frameworks (1)
- JavaWeb (3)
- Spring (6)
- Hibernate (26)
- Maven (2)
- Plugin (1)
- Velocity (1)
- Freemarker (1)
- Spring security (18)
- Google (5)
- Guice (5)
- rmi (1)
- Annotation (1)
- Binding (1)
- commons-fileupload (3)
- fileupload (3)
- ehcache (1)
- ApplicationContext (1)
- Resource (1)
- Validator (1)
- PropertyEditor (1)
- one-to-many (5)
- cascade (2)
- MessageSource (1)
- Serialize (1)
- Serializable (1)
- delete (1)
- delete-orphan (1)
- fetch (1)
- one-to-one (1)
- join (4)
- DomainObject (1)
- CRUD (1)
- composite-element (1)
- Hibernate ORM (14)
- dynamic-insert (1)
- dynamic-update (1)
- Search (1)
- DDD (0)
- Job (0)
- element (1)
- Unique (1)
- Group (1)
- tomcat (1)
- https (1)
- mysql (1)
最新评论
-
xurunchengof:
[url][url][url][img][img][img][ ...
Spring Security 3多用户登录实现之三 验证过滤器 -
Wind_ZhongGang:
yo8237233 写道你这样的话如果上传文件超过了50000 ...
Spring集成Commons fileupload,文件上传 -
yo8237233:
你这样的话如果上传文件超过了50000000就会报异常
Spring集成Commons fileupload,文件上传 -
zhuzhiguosnail:
Wind_ZhongGang 写道lianglaiyang 写 ...
Spring Security 3多用户登录实现一 -
曾老师:
?????
Spring Security 3用户登录实现之十 用户切换
接前讲,首先针对一个多种用户类型的登录需求,需要先实现多种用户类型的登录界面的展示,Spring Security提供了这样一个接口来帮助我们实现多种用户类型的登录界面的展示,这个接口就是AuthenticationEntryPoint, 实现这样一个接口,我们就可以随心所欲的控制登录界面的展示了,当我们访问一个受权限的资源,而当前又没有权限访问时,Spring Security就会将处理导向这个接口的实现。针对前讲我所提到的需求,在这里我将实现前台用户和后台用户登录界面的展示,先来看看我的源码实现吧,在这里为了实现多用户类型的登录,很多场景我都需要根据相应的请求参数或地址来判断我需要导向哪个URL地址,我在这里特实现了一个共用的接口和类,接口名为DirectUrlResolver。
package com.template.security.shared; import javax.servlet.http.HttpServletRequest; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 12-11-9 * Time: 下午7:11 */ public interface DirectUrlResolver { boolean support(HttpServletRequest request); String directUrl(); }
package com.template.security.shared; import javax.servlet.http.HttpServletRequest; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 12-11-9 * Time: 下午7:12 */ public abstract class AbstractDirectUrlResolver implements DirectUrlResolver { protected String pattern; protected String directUrl; @Override public abstract boolean support(HttpServletRequest request); @Override public String directUrl() { return this.directUrl; } public void setPattern(String pattern) { this.pattern = pattern; } public void setDirectUrl(String directUrl) { this.directUrl = directUrl; } }
package com.template.security.shared; import com.template.utils.StringUtils; import javax.servlet.http.HttpServletRequest; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 12-11-9 * Time: 下午7:13 */ public class RequestParameterDirectUrlResolver extends AbstractDirectUrlResolver { private String parameterName; @Override public boolean support(HttpServletRequest request) { String parameterValue = request.getParameter(parameterName); if (StringUtils.isEmpty(parameterValue)) { return false; } return parameterValue.equals(this.pattern); } public void setParameterName(String parameterName) { this.parameterName = parameterName; } }
package com.template.security.shared; import javax.servlet.http.HttpServletRequest; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 12-11-9 * Time: 下午7:13 */ public class RequestUriDirectUrlResolver extends AbstractDirectUrlResolver { @Override public boolean support(HttpServletRequest request) { String requestURI = request.getRequestURI(); return requestURI.contains(this.pattern); } }
RequestParameterDirectUrlResolver和RequestUriDirectUrlResolver都实现了DirectUrlResolver这样一个接口,前者的实现是根据相应请求中的参数来判断, 而后者的实现是根据相应的请求地址来判断。
现在让我们来看看如何通过实现AuthenticationEntryPoint接口来控制什么时候展示前台登录界面,什么时候展示后台登录界面的吧。
package com.template.security.login; import com.template.security.shared.DirectUrlResolver; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.AuthenticationEntryPoint; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 12-11-9 * Time: 下午7:40 */ public class MultipleAuthenticationLoginEntry implements AuthenticationEntryPoint { private String defaultLoginUrl; private List<DirectUrlResolver> directUrlResolvers = new ArrayList<DirectUrlResolver>(); @Override public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException { for (DirectUrlResolver directUrlResolver : directUrlResolvers) { if (directUrlResolver.support(request)) { String loginUrl = directUrlResolver.directUrl(); response.sendRedirect(loginUrl); return; } } response.sendRedirect(defaultLoginUrl); } public void setDefaultLoginUrl(String defaultLoginUrl) { this.defaultLoginUrl = defaultLoginUrl; } public void setDirectUrlResolvers(List<DirectUrlResolver> directUrlResolvers) { this.directUrlResolvers = directUrlResolvers; } }
再来看看在Spring配置文件中是如何对相应的登录入口进行配置的吧
<beans:bean id="multipleAuthenticationLoginEntry" class="com.template.security.login.MultipleAuthenticationLoginEntry"> <beans:property name="defaultLoginUrl" value="/backend/login"/> <beans:property name="directUrlResolvers"> <beans:list> <beans:ref bean="backendLoginEntry"/> <beans:ref bean="forendLoginEntry"/> </beans:list> </beans:property> </beans:bean> <beans:bean id="backendLoginEntry" class="com.template.security.shared.RequestUriDirectUrlResolver"> <beans:property name="pattern" value="/backend"/> <beans:property name="directUrl" value="/backend/login"/> </beans:bean> <beans:bean id="forendLoginEntry" class="com.template.security.shared.RequestUriDirectUrlResolver"> <beans:property name="pattern" value="/forend"/> <beans:property name="directUrl" value="/forend/login"/> </beans:bean>
这里我是根据请求的地址中是否包括backend或forend来判断用户是进行前台登录或后台登录的, 这可以从配置文件中的backendLoginEntry和forendLoginEntry中的pattern属性看出,这个pattern的作用就是判断用户是进行前台登录或后台登录的依据,而directUrl则是我们想要导向的登录界面地址。
- SHTEPMPLATE.zip (43.6 KB)
- 下载次数: 164
发表评论
-
Spring Security 之 Session Management
2013-01-06 11:43 5612Spring Security为我们提供了Sess ... -
Spring Security 之 Digest Authentication
2013-01-04 16:22 0<?xml version=" ... -
Spring Security 之 Basic Authentication
2013-01-04 11:58 2047Spring Security实现Basic A ... -
Spring Security 3用户登录实现之十二 授权判断
2012-11-29 15:38 2250Spring Security在验证用户登录后的另 ... -
Spring Security 3多用户登录实现之十一 退出
2012-11-19 21:41 2659Spring Security的退出功能由Logou ... -
Spring Security 3用户登录实现之十 用户切换
2012-11-17 18:15 6337部分情况下用户希望能够在不知道其它用户账号及密码的 ... -
Spring Security 3多用户登录实现之九 基于持久化存储的自动登录
2012-11-17 00:40 6312Spring Security实现自动登录的基本流 ... -
Spring Security 3多用户登录实现之八 基于Cookie的自动登录
2012-11-15 22:44 11037Spring Security为我们提供了两种方式的自 ... -
Spring Security 3多用户登录实现之七 用户验证失败处理改进
2012-11-11 11:24 8982验证登录失败后的处理的常见处理是返回到登录页面,并 ... -
Spring Security 3多用户登录实现之六 用户验证后处理
2012-11-11 00:42 4232验证用户后主要有这样两种走向,一种是验证失败,一种 ... -
Spring Security 3多用户登录实现之五 验证用户凭证
2012-11-11 00:42 4969有了用户凭证后, 如何验证用户的凭证是否正确呢, 这就需 ... -
Spring Security 3多用户登录实现之四 用户凭证
2012-11-10 20:00 5111前讲讲到AuthenticationFilt ... -
Spring Security 3多用户登录实现之三 验证过滤器
2012-11-10 19:58 15172当填写完成登录表单提交后,首先会被对应的提交表单提起 ... -
Spring Security 3多用户登录实现一
2012-11-10 19:57 5088使用Spring Security 3 来实现多种 ... -
Spring security customize password encoder
2011-07-29 22:21 2427Spring security为我们 ... -
Spring security防用户重复登录
2011-07-28 23:28 3965使用Spring security如何防止用户的重复登录呢 ... -
Spring security用户权限数据库配置
2011-07-28 22:11 6565关于安全性服务,有两个重要的概念需要理解,一是认证,即判断 ... -
Spring security HTTP Basic认证
2011-07-27 21:54 5301Spring security框架集成了多种流行的安全认证 ...
相关推荐
本文将详细介绍如何在Spring Security框架下配置多登录页面,包括前台与后台用户的分开登录界面,以及注销登录后返回到不同的页面等功能。 #### 一、Spring Security简介 Spring Security是Spring家族中的一个子...
本文将详细介绍如何通过Spring Security配置多个登录页面,并为不同类型的用户设置不同的登录逻辑及登出后的返回界面。这不仅有助于提高系统的安全性,还能优化用户体验。 ### Spring Security简介 Spring ...
### Spring Security 多...通过本文介绍的方法,你可以轻松地在Spring Security中实现多页面登录功能,从而提高应用程序的安全性和用户体验。希望这些知识点能帮助你在实际开发过程中更好地利用Spring Security框架。
- 支持多语言界面,可以根据用户的首选语言显示错误消息和提示信息。 6. **会话管理**: - 可以设置会话超时、限制并发会话以及实现会话固定化策略,防止会话劫持。 7. **细粒度的URL保护**: - 使用`@Secured`...
在"springsecurity学习笔记"中,你可能会涉及以下主题: - Spring Security的基本配置,包括web安全配置和全局安全配置。 - 如何自定义认证和授权流程,比如实现自定义的AuthenticationProvider和...
在构建基于 Spring Boot 3、Spring Security 6 和 Vue.js 3 的前后端分离式论坛系统时,我们涉及了现代Web开发的多个关键领域。这是一个综合性的项目,旨在利用最新的技术栈来创建一个高效、安全且用户体验良好的...
3. **过滤器链(Filter Chain)**:Spring Security 使用一系列过滤器处理请求,如 `SecurityContextPersistenceFilter` 保存和恢复安全上下文,`UsernamePasswordAuthenticationFilter` 处理登录请求。理解过滤器链...
4. **登录与注销处理**:Spring Security会自动处理登录和注销请求,但你可能需要自定义登录页面或者实现特定的注销逻辑。 **三、客户端应用的SSO体验** 1. **用户访问**:当用户首次访问受保护的资源时,会被...
- Spring Security 提供了对国际化(i18n)的支持,使得开发者能够轻松地实现多语言界面。 #### 四、Spring Security 社区 - **4.1 任务跟踪**:开发者可以通过 JIRA 等工具跟踪项目的问题和进展。 - **4.2 成为参与...
3. 实现登录界面,处理用户提交的登录信息。 4. 定义用户凭证(如内存中的UserDetails),并创建相应的`UserDetailsService`。 5. 创建一个安全配置类,扩展`WebSecurityConfigurerAdapter`,覆盖必要的方法来定制...
在本“springsecurity前端素材”中,我们有两个主要的文件夹:templates和static,它们分别代表了前端展示层的不同方面。 **templates** 文件夹通常包含了应用的HTML模板文件,这些文件被用于构建用户界面。在...
2. **配置登录页面**:Spring Security 默认提供 `/login` 页面,也可以自定义登录界面。 3. **处理登录请求**:在配置类中,通过 `http.formLogin()` 设置登录行为,如登录成功后的重定向等。 4. **处理未授权和...
5. Thymeleaf模板:学习如何创建和使用Thymeleaf模板,结合Spring Security实现动态展示登录状态、权限提示等。 6. 错误页面处理:配置Spring Boot的错误页面,处理未授权、未登录等异常情况。 7. 登录和注销流程:...
9. **Web表单登录**:Spring Security提供了一个默认的登录页面和登录处理控制器,但也可以自定义登录界面和流程。 10. **OAuth2集成**:Spring Security 3.x版本开始支持OAuth2,允许应用与其他服务进行安全的API...
- **国际化支持**:Spring Security支持多语言界面,提供国际化配置。 6. **源码解析** - 理解Spring Security的源码有助于深入定制和优化安全策略。 - 关键类如`AbstractAuthenticationProcessingFilter`、`...
Spring Security 是一个强大的安全框架,它可以轻松地实现用户认证和授权。在 `src/main/java/com/example/yourapp/config` 目录下创建一个名为 `SecurityConfig.java` 的类,并实现相关配置: ```java @...
本实例旨在展示如何将Spring Security与CAS结合,实现一个高效的单点登录(Single Sign-On,SSO)解决方案。下面,我们将深入探讨这个集成过程。 首先,Spring Security是Spring框架的一部分,专门用于应用程序的...
开发过程中,开发者可以利用Spring Boot的自动配置和Spring Security的灵活性来实现复杂的业务逻辑和权限控制,同时Vue 3的组件化特性简化了前端开发。 在实际项目中,开发者还需要考虑数据库(如MySQL、PostgreSQL...