之前有篇文章记录了我是如何快速添加spring-security模块的,虽然快速,但是功能很简单。最近需要添加一个新的功能,就是验证用户是否过期。
实现方法肯定很多,但是首先要考虑自己项目当前什么个结构。在我的web.xml中,有两个Filter,如下:
<filter>
<filter-name>CodeFilter</filter-name>
<filter-class>com.platform.util.CheckCodeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CodeFilter</filter-name>
<url-pattern>/j_spring_security_check</url-pattern>
</filter-mapping>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
第一个filter就是用来验证安全码的,第二个就是spring-security发挥功能的filter。
开始,我打算在CodeFilter中验证用户是否过期。
filterChain.doFilter(request, response);
Object exceptObject = session.getAttribute(
"SPRING_SECURITY_LAST_EXCEPTION");
if (exceptObject != null
&& exceptObject instanceof AccountExpiredException)
response.sendRedirect("login.jsp?errInfo=3");
高人一看就知道这里错了,doFilter之后,是不能再sendRedirect的。我这么想的原因就是springSecurityFilterChain运行之后才会有验证结果,我才好判断是否有过期的异常。
没办法,只能到login.jsp页面去干这件事情了。
session = request.getSession(false);
if(session!=null){
Object exceptObject = session
.getAttribute("SPRING_SECURITY_LAST_EXCEPTION");
if (exceptObject != null
&& exceptObject instanceof AccountExpiredException)
{
out.println("<script language='JavaScript' defer='defer'>");
out.println("alert('用户已过期!');");
out.println("</script>");
}
return;
}
另外我用的是spring-security2.0,好像不支持验证用户过期。下面是JdbcDaoImpl里的一段代码,从这里看,有关是否不过期的变量都被true默认代替了,所以,得自己写一个自己的JdbcDaoImpl。
protected Object mapRow(ResultSet rs, int rownum) throws SQLException {
String username = rs.getString(1);
String password = rs.getString(2);
boolean enabled = rs.getBoolean(3);
UserDetails user = new User(username, password, enabled, true, true, true,
new GrantedAuthority[] {new GrantedAuthorityImpl("HOLDER")});
return user;
}
我写的JdbcDaoImpl取名叫MyJdbcDaoImpl。并且要在applicationContext.xml中进行配置:
<bean id="securityService" class="com.platform.util.MyJdbcDaoImpl">
<property name="dataSource" ref="dataSource"/>
</bean>
<security:authentication-provider user-service-ref="securityService">
<security:password-encoder hash="md5"/>
</security:authentication-provider>
分享到:
相关推荐
在Spring Boot项目中,可以通过添加`spring-security-oauth2-autoconfigure`依赖来快速启用OAuth2支持。配置主要包括: - **AuthorizationServerConfigurerAdapter**:配置授权服务器,定义授权端点、令牌端点等。...
1. 添加依赖:引入`spring-security-oauth2-server`和`spring-security-oauth2-client`库。 2. 配置OAuth2服务器:创建`AuthorizationServerConfigurerAdapter`并重写相关方法。 3. 配置资源服务器:创建`...
它集成了Spring Security,提供了丰富的功能,包括身份验证、授权、会话管理、跨站请求伪造(CSRF)防护、密码加密等。通过此框架,开发者可以更便捷地实现权限控制和安全防护,减少重复的工作量。 1. **身份验证**...
`spring-security-oauth2`模块提供了OAuth2协议的支持,使得开发人员可以轻松地添加认证和授权功能到他们的应用程序。 OAuth2是一个开放标准,它允许用户让第三方应用在无需用户提供用户名和密码的情况下,获取有限...
在本文中,我们将深入探讨Spring Security的核心概念、功能以及3.1.0版本中的关键特性。 1. **核心概念** - **安全上下文(Security Context)**:这是Spring Security的核心组件,存储当前用户的安全信息,如身份...
文档会详细解释如何在`pom.xml`中添加`renren-security`的依赖,以及如何配置相应的启动类和配置文件。 对于认证部分,文档详细阐述了`renren-security`的认证流程,包括用户的登录请求处理、凭证的校验、以及如何...
在Spring Boot应用中整合Spring Security,首先需要添加相应的依赖。在`pom.xml`或`build.gradle`文件中,你需要引入Spring Security的依赖项,例如: ```xml <groupId>org.springframework.boot <artifactId>...
在 Spring Security 中,当用户会话过期时,会被重定向至此页面。 3. **index.jsp**: 这是应用的首页,用户在登录后可能会被重定向到此页面。Spring Security 可以控制哪些用户可以访问这个页面。 4. **loggedout....
1. 添加依赖:在pom.xml中引入Spring Security、JWT库、Redis和Quartz的相关依赖。 2. 配置文件:设置Spring Security、Redis和Quartz的相关属性。 3. 主启动类:启用Spring Security和Quartz的相关配置。 七、示例...
本示例"springboot-springsecurity-demo"就是基于这两个组件的深度整合,旨在帮助开发者理解如何在Spring Boot项目中实现安全控制。 首先,让我们来看看核心文件`pom.xml`。这是Maven项目的配置文件,用于管理项目...
在Spring Boot应用中,我们可以通过添加`spring-security-oauth2-autoconfigure`依赖来配置Authorization Server。我们需要定义客户端详细信息、授权类型、令牌端点等。 4. **配置Resource Server**: Resource ...
只需在项目中引入`spring-boot-starter-security`依赖,Spring Boot就会自动配置安全功能。如果需要监控Spring Security的状态,可以添加`spring-boot-starter-actuator`。此外,还需要`spring-boot-starter-web`来...
Spring Security OAuth2 是一个强大的框架,用于为应用程序提供授权(Authorization)和认证(Authentication)功能。这个框架基于OAuth2协议,允许第三方应用在用户授权的情况下访问受保护的资源。在这个配置实现中...
在Spring Security中实现JWT认证,我们需要添加相关的依赖,如`spring-security-jwt`,然后创建Token解析器和提供者。解析器负责验证Token的有效性,提供者则用于生成新的Token。以下是一个简单的JWT Token提供者的...
首先,我们需要在Grails项目中添加Spring Security插件。这通常通过在`build.gradle`文件中引入依赖来完成,例如: ```groovy dependencies { compile 'org.grails.plugins:spring-security-core:4.0.2' } ``` 安装...
1. 添加依赖:在项目中引入 Spring Security 和 JWT 相关的库,如 spring-security-config、spring-security-web、jjwt 等。 2. 配置 Spring Security:创建一个配置类继承 `WebSecurityConfigurerAdapter`,重写 `...
1. **添加依赖**:首先,在`pom.xml`文件中引入Spring Security和JWT的相关依赖,如`spring-security-oauth2-jose`和`jjwt`库。 2. **配置Spring Security**:创建一个`SecurityConfig`类,继承`...
为了允许用户访问静态资源,我们需要在SpringSecurity的配置中进行适当的设置。以下是一些关于SpringSecurity处理静态资源的关键知识点: 1. **静态资源路径配置**:在Spring Security配置类中,可以通过`...
在Spring Security中集成JWT,首先需要添加相关依赖,比如jjwt库,用于生成和解析JWT。然后,我们需要配置Spring Security,包括定义权限检查、认证和授权策略。这通常涉及到创建一个自定义的`AuthenticationManager...
- 可选地,可以添加刷新Token的功能,允许用户在Token即将过期时获取新的Token,以保持会话的持续性。 8. **错误处理**: - 设计合适的错误处理机制,比如当JWT Token无效或过期时,返回明确的错误信息。 9. **...