public class CSRFRequestDataValueProcessor implements RequestDataValueProcessor
{/**
* 重载方法
*
* @param request
* @param action
* @return
*/
@Override
public String processAction(HttpServletRequest request, String action)
{
return action;
}
/**
* 重载方法
*
* @param request
* @param name
* @param value
* @param type
* @return
*/
@Override
public String processFormFieldValue(HttpServletRequest request, String name, String value,
String type)
{
return value;
}
/**
* 重载方法
*
* @param request
* @return
*/
@Override
public Map<String, String> getExtraHiddenFields(HttpServletRequest request)
{
Map<String, String> hiddenFields = new HashMap<String, String>();
hiddenFields.put(CSRFTokenManager.CSRF_PARAM_NAME,
CSRFTokenManager.getTokenForSession(request.getSession()));
return hiddenFields;
}
/**
* 重载方法
*
* @param request
* @param url
* @return
*/
@Override
public String processUrl(HttpServletRequest request, String url)
{
return url;
}
}
public class CSRFHandlerInterceptor extends HandlerInterceptorAdapter
{
/**
* 重载方法
*
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception
{
if (!request.getMethod().equalsIgnoreCase("POST"))
{
// Not a POST - allow the request
return true;
}
else
{
// This is a POST request - need to check the CSRF token
String sessionToken = CSRFTokenManager.getTokenForSession(request.getSession());
String requestToken = CSRFTokenManager.getTokenFromRequest(request);
if (sessionToken.equals(requestToken))
{
return true;
}
else
{
response.sendError(HttpServletResponse.SC_FORBIDDEN, "Bad or missing CSRF value");
return false;
}
}
}
}
final class CSRFTokenManager
{
/**
* Token属性名称
*/
static final String CSRF_PARAM_NAME = "CSRF_SECURITY_TOKEN";
private final static String CSRF_TOKEN_FOR_SESSION_ATTR_NAME = CSRFTokenManager.class.getName()
+ ".tokenval";
private CSRFTokenManager()
{
}
/**
*
* 从Session中获取Token
*
* @author 曾云龙
* @version V001Z0001
* @date 2013-7-1
* @see [相关类/方法]
* @since [产品/模块版本]
*/
static String getTokenForSession(HttpSession httpSession)
{
String token = null;
synchronized (httpSession)
{
token = (String)httpSession.getAttribute(CSRF_TOKEN_FOR_SESSION_ATTR_NAME);
if (null == token)
{
token = UUID.randomUUID().toString();
httpSession.setAttribute(CSRF_TOKEN_FOR_SESSION_ATTR_NAME, token);
}
}
return token;
}
/**
*
* 从request中获取token
*
* @author 曾云龙
* @version V001Z0001
* @date 2013-7-1
* @see [相关类/方法]
* @since [产品/模块版本]
*/
static String getTokenFromRequest(HttpServletRequest request)
{
return request.getParameter(CSRF_PARAM_NAME);
}
}
相关推荐
spring-token 整合JWT,spring,springMVC,实现基于token验证 因为CSDN博客上 这篇文章好多小伙伴希望我分享一下源码, 我这边就这个功能单独拉出来写了一个小示例供大家分享。 因为这篇博客讲的是基于JWT和spring...
**Spring MVC Login Demo详解** Spring MVC 是 Spring 框架的一部分,主要用于构建Web应用程序的模型-视图-控制器(MVC)架构。本教程将深入探讨一个基于Spring MVC的登录示例,帮助开发者理解如何在实际项目中实现...
Spring MVC是这个系统所采用的技术框架,它是一个用于构建Web应用程序的轻量级、模型-视图-控制器(MVC)框架。 【Spring MVC详解】 Spring MVC是Spring框架的一个模块,主要用于构建Web应用的后端控制层。它提供了...
1. **身份验证中心(Authentication Server)**:使用Spring Security和Spring OAuth2建立一个独立的授权服务器,处理用户的登录请求,验证用户凭证,并生成访问令牌(Access Token)。 2. **资源服务器(Resource ...
**Spring MVC RESTful接口实例详解** Spring MVC 是一个强大的Java Web框架,用于构建基于模型-视图-控制器(MVC)架构的Web应用程序。RESTful是Representational State Transfer的缩写,是一种网络应用程序的设计...
此外,Spring Security还可以结合Redis实现基于Token的身份验证,如JWT(JSON Web Token)。用户登录成功后,服务器会返回一个包含用户信息的JWT,客户端将其存储并附在后续请求的Header中。服务器端验证JWT的有效性...
Spring MVC接口防数据篡改和重复提交 Spring MVC框架中,数据篡改和重复提交是常见的安全问题,本文将详细介绍如何使用Spring MVC防止数据篡改和重复提交。 一、自定义注解 在Spring MVC中,可以使用自定义注解来...
Spring MVC 防止数据重复提交的方法是使用 Token 机制来实现的,该机制通过在服务器端生成一个随机的 UUID,并将其存储在 Session 中,然后在客户端提交数据时带上该 UUID,服务器端在接收到该 UUID 后,对其进行...
这是一个基于spring MVC框架构建的网站后台管理系统。它提供了内置的用户管理、角色管理、栏目管理、内容管理和数据分析等功能。该系统支持EF数据,采用resTful API和JSON Web token实现前后端分离。除了基本的功能...
在Java开发领域,微信授权认证登录是常见的功能需求,特别是在基于Spring MVC框架构建的Web应用中。本项目"java版微信授权认证登录spring-mvc by WangJx"着重讲解了如何利用微信开放平台的API来实现用户授权登录的...
总的来说,"Token-SpringMVC"是Spring MVC框架中防止重复提交的一种实用策略,它通过令牌验证确保了请求的唯一性,从而保护了系统的数据一致性。在实际开发中,我们需要根据项目需求和安全级别来选择合适的防止重复...
Spring Boot MVC 是一个基于Spring框架的高度简化开发的工具,它整合了Spring MVC和Spring的核心特性,使得构建Web应用变得更加便捷。在"spring boot 携带token登录,token拦截器,增删改查功能"这个描述中,我们...
10. **配置**:Spring MVC的配置通常包括servlet配置(web.xml)、Spring MVC配置(如spring-mvc.xml)以及Spring容器配置(如applicationContext.xml)。这些配置文件定义了组件的bean、bean之间的依赖关系、拦截器...
2. 创建Spring配置:在Spring的配置文件中添加对微信API的配置,包括AppID、AppSecret、Token和EncodingAESKey等信息。 3. 实现消息处理器:通过继承微信API提供的`MessageHandler`抽象类或使用`...
Spring Security 提供了多种认证和授权方式,如基于表单的登录、基于 token 的认证等,并可以通过 XML 或 Java 配置进行定制。在 Spring MVC 应用中集成 Spring Security,可以确保只有经过授权的用户才能访问特定的...
**Spring MVC 框架简介** Spring MVC 是 Spring 框架的一个模块,它为构建基于 Java 的 Web 应用程序提供了模型-视图-控制器(MVC)架构。Spring MVC 使得开发者能够将应用程序的业务逻辑与表示层分离,提高了代码...
spring security 全注解式的权限管理 动态配置权限,角色和资源,权限控制到按钮粒度 采用token进行权限校验,禁用session,未登录返回401,权限不足返回403 采用redis存储token及权限信息 内置功能: 用户管理...
本项目“最新java技术栈RBAC基于spring security与sping mvc分布式权限管理系统”旨在利用先进的Java技术栈,实现一个高效、安全的权限控制解决方案。下面我们将深入探讨其中涉及的关键技术和概念。 1. **RBAC...
该项目使用的技术:SpringSpring MVCMyBatis 3.4Spring-testJUnitRedisMySqlJWT配置数据库脚本:schema.sql 。根据需要更改 application.properties :# MySql 配置database.driver=...