`

spring mvc token

 
阅读更多

http://web.securityinnovation.com/appsec-weekly/blog/bid/79007/How-to-Prevent-Cross-Site-Request-Forgery-CSRF-in-SpringMVC

 

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验证

    spring-token 整合JWT,spring,springMVC,实现基于token验证 因为CSDN博客上 这篇文章好多小伙伴希望我分享一下源码, 我这边就这个功能单独拉出来写了一个小示例供大家分享。 因为这篇博客讲的是基于JWT和spring...

    spring mvc login demo

    **Spring MVC Login Demo详解** Spring MVC 是 Spring 框架的一部分,主要用于构建Web应用程序的模型-视图-控制器(MVC)架构。本教程将深入探讨一个基于Spring MVC的登录示例,帮助开发者理解如何在实际项目中实现...

    毕业设计管理系统java服务端,采用spring mvc.zip

    Spring MVC是这个系统所采用的技术框架,它是一个用于构建Web应用程序的轻量级、模型-视图-控制器(MVC)框架。 【Spring MVC详解】 Spring MVC是Spring框架的一个模块,主要用于构建Web应用的后端控制层。它提供了...

    spring security + spring oauth2 +spring mvc SSO单点登录需要的最小jar包集合

    1. **身份验证中心(Authentication Server)**:使用Spring Security和Spring OAuth2建立一个独立的授权服务器,处理用户的登录请求,验证用户凭证,并生成访问令牌(Access Token)。 2. **资源服务器(Resource ...

    Spring MVC RESTFUL接口实例和android测试客户端

    **Spring MVC RESTful接口实例详解** Spring MVC 是一个强大的Java Web框架,用于构建基于模型-视图-控制器(MVC)架构的Web应用程序。RESTful是Representational State Transfer的缩写,是一种网络应用程序的设计...

    springMVC注解+ security + redis 实例

    此外,Spring Security还可以结合Redis实现基于Token的身份验证,如JWT(JSON Web Token)。用户登录成功后,服务器会返回一个包含用户信息的JWT,客户端将其存储并附在后续请求的Header中。服务器端验证JWT的有效性...

    Spring MVC接口防数据篡改和重复提交

    Spring MVC接口防数据篡改和重复提交 Spring MVC框架中,数据篡改和重复提交是常见的安全问题,本文将详细介绍如何使用Spring MVC防止数据篡改和重复提交。 一、自定义注解 在Spring MVC中,可以使用自定义注解来...

    Spring mvc防止数据重复提交的方法

    Spring MVC 防止数据重复提交的方法是使用 Token 机制来实现的,该机制通过在服务器端生成一个随机的 UUID,并将其存储在 Session 中,然后在客户端提交数据时带上该 UUID,服务器端在接收到该 UUID 后,对其进行...

    基于Spring MVC的网站后台管理系统Larva.zip

    这是一个基于spring MVC框架构建的网站后台管理系统。它提供了内置的用户管理、角色管理、栏目管理、内容管理和数据分析等功能。该系统支持EF数据,采用resTful API和JSON Web token实现前后端分离。除了基本的功能...

    java版微信授权认证登录spring-mvc by WangJx

    在Java开发领域,微信授权认证登录是常见的功能需求,特别是在基于Spring MVC框架构建的Web应用中。本项目"java版微信授权认证登录spring-mvc by WangJx"着重讲解了如何利用微信开放平台的API来实现用户授权登录的...

    token-springMVC 防止重复提交

    总的来说,"Token-SpringMVC"是Spring MVC框架中防止重复提交的一种实用策略,它通过令牌验证确保了请求的唯一性,从而保护了系统的数据一致性。在实际开发中,我们需要根据项目需求和安全级别来选择合适的防止重复...

    spring boot MVC

    Spring Boot MVC 是一个基于Spring框架的高度简化开发的工具,它整合了Spring MVC和Spring的核心特性,使得构建Web应用变得更加便捷。在"spring boot 携带token登录,token拦截器,增删改查功能"这个描述中,我们...

    springmvc(spring4版本)+自带登录和拦截器

    10. **配置**:Spring MVC的配置通常包括servlet配置(web.xml)、Spring MVC配置(如spring-mvc.xml)以及Spring容器配置(如applicationContext.xml)。这些配置文件定义了组件的bean、bean之间的依赖关系、拦截器...

    wechat-spring:调用微信企业api的小型Spring MVC web项目

    2. 创建Spring配置:在Spring的配置文件中添加对微信API的配置,包括AppID、AppSecret、Token和EncodingAESKey等信息。 3. 实现消息处理器:通过继承微信API提供的`MessageHandler`抽象类或使用`...

    springMVC+springsecurity_Demo

    Spring Security 提供了多种认证和授权方式,如基于表单的登录、基于 token 的认证等,并可以通过 XML 或 Java 配置进行定制。在 Spring MVC 应用中集成 Spring Security,可以确保只有经过授权的用户才能访问特定的...

    getting-started-springmvc:在Spring MVC框架中使用Twilio的简介

    **Spring MVC 框架简介** Spring MVC 是 Spring 框架的一个模块,它为构建基于 Java 的 Web 应用程序提供了模型-视图-控制器(MVC)架构。Spring MVC 使得开发者能够将应用程序的业务逻辑与表示层分离,提高了代码...

    基于Springboot+Mybatis+ SpringMvc+springsecrity+Redis完整网站后台管理系统

    spring security 全注解式的权限管理 动态配置权限,角色和资源,权限控制到按钮粒度 采用token进行权限校验,禁用session,未登录返回401,权限不足返回403 采用redis存储token及权限信息 内置功能: 用户管理...

    最新java技术栈RBAC基于spring security与sping mvc分布式权限管理系统

    本项目“最新java技术栈RBAC基于spring security与sping mvc分布式权限管理系统”旨在利用先进的Java技术栈,实现一个高效、安全的权限控制解决方案。下面我们将深入探讨其中涉及的关键技术和概念。 1. **RBAC...

    spittr:RESTful API服务器,由Spring,Spring MVC,MyBatis基于Java 8,MySql,Redis实现

    该项目使用的技术:SpringSpring MVCMyBatis 3.4Spring-testJUnitRedisMySqlJWT配置数据库脚本:schema.sql 。根据需要更改 application.properties :# MySql 配置database.driver=...

Global site tag (gtag.js) - Google Analytics