精华内容
下载资源
问答
  • 防止重复提交 之 更强大的tokenSession拦截器
  • JavaEE Struts2利用tokenSession防止重复提交
  • Struts2利用token和tokenSession拦截器防止重复提交  有时候网络响应慢,用户可能会再次点击提交按钮,或者在保存页面refresh 也会造成重复提交,这样会造成数据库中有多条相同的数据; 我们当然可以利用js来控制,...

    Struts2利用token和tokenSession拦截器防止重复提交
      有时候网络响应慢,用户可能会再次点击提交按钮,或者在保存页面refresh 也会造成重复提交,这样会造成数据库中有多条相同的数据;

    我们当然可以利用js来控制,但是如果浏览器禁用了JS,那就不能控制了。

    Struts2中设计了token和tokenSession拦截器来拦截重复提交:

    jsp页面:

    复制代码
    1 <@ taglib prefix=“s” uri="/struts-tags" />
    2
    3 <s:form action=“testToken” namespace="/" method=“post”>
    4 <s:token></s:token>
    5 <s:textfield name=“userName” label=“Username”/>
    6 <s:submit></s:submit>
    7 </s:form>
    复制代码
      struts.xml配置:

    复制代码
    <action =“testToken” class=“com.test.UserAction”>


    /success.jsp
    /error.jsp?message=重复提交 <!–配置name为invalid.token的result 重复提交时跳转到此页面—>

    复制代码
      Action.java:

    复制代码
    1 public class UserAction extends ActionSupport{//一定要继承ActionSupport
    2 private String userName;
    3 public void execute(){
    4 return “success”;
    5 }
    6 public void setUserName(String userName) {
    7      this.userName = userName;
    8    }
    9    public String getUserName() {
    10      return userName;
    11    }
    12 }
    复制代码
      如果利用tokenSession,重复提交时将不会跳转

    配置只需把xml文件中token改为tokenSession 并且去掉invalid.token的result即可

    展开全文
  • token session cookie

    2019-05-08 15:54:50
    cookie、sessiontoken之间的关系:https://blog.csdn.net/qq_37939251/article/details/83511451有JWT 彻底弄懂session,cookie,token: https://segmentfault.com/a/1190000017831088还不错 Cookie、Session、...

    cookie、session与token之间的关系: https://blog.csdn.net/qq_37939251/article/details/83511451 有JWT

    彻底弄懂session,cookie,token: https://segmentfault.com/a/1190000017831088 还不错

    Cookie、Session、Token那点事儿: https://www.jianshu.com/p/bd1be47a16c1

    CSRF攻击与防御:https://blog.csdn.net/xiaoxinshuaiga/article/details/80766369

    聊一聊cookie:https://segmentfault.com/a/1190000004556040#articleHeader6

    cookie/session的机制与安全:https://harttle.land/2015/08/10/cookie-session.html

    跨域资源共享 CORS 详解:http://www.ruanyifeng.com/blog/2016/04/cors.html

    XSS攻击进阶篇:http://blog.nsfocus.net/xss-advance/

    跨域:https://segmentfault.com/a/1190000015597029

    token认证:https://segmentfault.com/a/1190000014527692?utm_source=tag-newest

    JWT介绍:https://huanqiang.wang/2017/12/28/JWT%20%E4%BB%8B%E7%BB%8D/

    JSON Web Token 入门教程:http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html

    Token 认证的来龙去脉:https://segmentfault.com/a/1190000013010835 首看

    OAuth 2.0 获取令牌的四种方式: http://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html

    前后端分离实践: https://segmentfault.com/a/1190000012747428

    五种常用的Web安全认证方式:https://blog.csdn.net/aHardDreamer/article/details/90579814

    基于django-rest-framework的JWT的登陆与认证流程:https://blog.csdn.net/Newbietan/article/details/80505403

     

    后续。。。。。

    token组成:uid(用户唯一的身份标识)+time(当前时间的时间戳)+sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,防止第三方恶意拼接token请求服务器)

    公钥和私钥是成对的,它们互相解密,1:公钥加密,私钥解密,2:私钥数字签名,公钥验证

    签名过程:

    发送报文时,将报文文本用哈希函数生成报文摘要,用私钥对报文摘要加密后作为报文的数字签名,接收时,在用相同的哈希函数对接收到的报文进行运算得到摘要,再用公钥对签名解密,比较两个摘要是否相同。

    令牌(token)与密码(password)区别

    1:令牌是短期的,到期会自动失效,用户自己无法修改,密码一般长期有效,用户不修改,就不会发生变化。

    2:令牌可以被数据所有者撤销,会立即失效。

    3:令牌有权限范围,对于网络服务来说,只读令牌就比读写令牌更安全。密码一般是完整权限。

    注意,只要知道了令牌,就能进入系统。系统一般不会再次确认身份,所以令牌必须保密,泄漏令牌与泄漏密码的后果是一样的。 这也是为什么令牌的有效期,一般都设置得很短的原因,OAuth 2.0 对于如何颁发令牌的细节,规定得非常详细。具体来说,一共分成四种授权类型(authorization grant),即四种颁发令牌的方式。

     

    展开全文
  • Invalid token session. Please login again.". It is quite obvious - you're logged in, so Opencart redirects you to your admin home screen, but then it can't find token within your url, so ...
  • 因为struts2阻塞tokenSession的id值相同的访问,最初的访问结束后直接返回到正常处理代码,后面的访问略过,即只处理第一次访问。 按理说使用tokenSession可以不配置invalid.token的result,但是偶尔有种情况会提示...

    因为struts2阻塞tokenSession的id值相同的访问,最初的访问结束后直接返回到正常处理代码,后面的访问略过,即只处理第一次访问。

    按理说使用tokenSession可以不配置invalid.token的result,但是偶尔有种情况会提示“No result defined for action com.syq2cy.test.LoginAction and result invalid.token”,就是如下情况:

    在<s:token/>的页面点击提交时,form提交前做了一次ajax访问,在这次ajax访问中会做tokenSession的id判断,但ajax访问未将tokenSession作为参数提交到后台,就会返回invalid.token。代码:

        @Override

        protected String handleToken(ActionInvocation invocation) throws Exception {

            //see WW-2902: we need to use the real HttpSession here, as opposed to the map

            //that wraps the session, because a new wrap is created on every request

            HttpSession session = ServletActionContext.getRequest().getSession(true);

            synchronized (session) {

                if (!TokenHelper.validToken()) {   //判断参数中是否有tokenSession ajax返回false

                    return handleInvalidToken(invocation);   // 走这

                }

                return handleValidToken(invocation);

            }

     

        }

     

     

      protected String handleInvalidToken(ActionInvocation invocation) throws Exception {

            ActionContext ac = invocation.getInvocationContext();

     

            HttpServletRequest request = (HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST);

            HttpServletResponse response = (HttpServletResponse)             ac.get(ServletActionContext.HTTP_RESPONSE);

            String tokenName = TokenHelper.getTokenName();

            String token = TokenHelper.getToken(tokenName);

     

            if ((tokenName != null) && (token != null)) {   // 都是null

               ......

            }

            return INVALID_TOKEN_CODE;   // 即invalid.token

    }

     

     

    解决办法:

    <interceptor-ref name="token">

       <param name="includeMethods">login</param> // 加上这个就ok了

    </interceptor-ref>

     

    另:1、Unexpected Exception caught setting 'token' on...这个东西不必在意,是params的问题。

           2、很多博客上都说第一次访问tokenSession比对成功后,session重新弄个数,这是不对的,应该是从session中清空这次的tokenSession,所以第二次访问的时候session中的tokenSession已经是null了,代码:public class TokenHelper{

               public static boolean validToken(){

                   ...

                   session.remove(tokenSessionName);

               }

           }

    作者:sunyq

    展开全文
  • 关于struts2的防止表单提交,网上有很多文章,给出另一位iteye的网友的文章链接: ...   将我实际使用中的情况做个记录: 首先,表单重复提交的情况大概有:...使用上面这位网友说的tokenSession,当没有配置&...

    关于struts2的防止表单提交,网上有很多文章,给出另一位iteye的网友的文章链接:

    http://wosyingjun.iteye.com/blog/1922768

     

    将我实际使用中的情况做个记录:

    首先,表单重复提交的情况大概有:

    1.多次点击submit提交

    2.提交后刷新浏览器

    3.浏览器URL回车

     

    使用上面这位网友说的tokenSession,当没有配置<result name="invalid.token">的时候,重复提交表单的1和2的情况都能完美处理,但是第三种情况会出现404

     

    这时候我发现还需要配置<result name="invalid.token">,让它返回到请求处理前的页面,这样就能完美处理此三种表单重复提交的问题了

     

    正确的配置:

    jsp页面:表单中加上<s:token/>

    Action的配置中:

     

     

    <action name="registStep1" class="userAction" method="registStep1">
           <interceptor-ref name="tokenSession"/>  
           <interceptor-ref name="defaultStack"/> 
           <result name="invalid.token">/WEB-INF/jsp/user/regist_step1.jsp</result>
    </action>
     

     

     

    展开全文
  • 简书的文章 ...     Token机制 ...在这样的流程下,我们需要考虑下面几个问题: ...服务端如何根据token获取用户的信息?... 非法客户端拦截了合法客户端的token,然后使用这个token向服务端发送请求...
  • Token 可以理解为就是一个令牌,原理: 客户端使用用户名和密码请求登录。服务端收到请求,验证用户名和密码。验证成功后,服务端会生成一个token,然后把这个token发送给客户端。客户端收到token后把它存储起来,...
  • 表单提交tokenSession

    千次阅读 2018-05-06 10:50:38
    <result>/jsp/admin/adminmanage.jsp <result name="createAdminError">/jsp/admin/createadmin.jsp <!--由于默认的拦截器栈中没有令牌的... <interceptor-ref name="tokenSession" />  </action>
  • # 获取sessioniddef get_sessionid(self):# 是要从localStorage中获取还是要从sessionStorage中获取,具体看目标系统存到哪个中# window.sessionStorage和直接写sessionStorage是等效的# 一定要使用return,不然获取...
  • HiMagpie 管家,维护并验证 TokenSession和接受推送消息和分发
  • 方法一:token ... 使用struts中的OGNL表达式,...并在表单第一次提交成功后删掉该token,当重复提交表单时,将tokensession中的token值比较,若相同,则提交通过,若不成功,则不通过; struts.xml: 需要在actio
  • # 获取sessionid def get_sessionid(self): # 是要从localStorage中获取还是要从sessionStorage中获取,具体看目标系统存到哪个中 # window.sessionStorage和直接写sessionStorage是等效的 # 一定要使用return,不然...
  • Struts2 tokenSession

    千次阅读 2013-08-09 11:23:47
    标签和token拦截器连用,解决了重复提交问题,用法极其简单:Action引用token拦截器,标签内加一个标签,两句话就足以概括,一分钟就足以做完。 但是结果稍稍有点遗憾:对于一次正常提交和一次重复提交,使用token...
  • 使用tokenSession拦截器时,依然会响应目标页面,但不会执行tokenSession之后的拦截器,就像什么都没有发生一样。  针对token方式,我们可以在tokenError.jsp页面接收操作信息,使用s:actionerror标签 @ ...
  • 17.3 更强大的tokenSession拦截器 回顾一下上面&lt;s:token/&gt;标签和token拦截器连用,解决了重复提交问题,用法极其简单:Action引用token拦截器,&lt;s:form/&gt;标签内加一个&lt;s:token...
  • Struts的Token(令牌)机制能够很好的解决表单重复提交的问题,基本原理是:服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,看是否匹配。在处理完该请求后,且在...
  • 在使用struts2 token防止重复提交表单的时候,填写表单时间长了,这个时候就会提示 重复提交表单的错误。 感觉这应该是session过期了, 如果把session过期时间变长,那会浪费资源呢。   这个怎么解决呢?...
  • struts2处理表单重复提交在struts2中token可以很简单的处理表单重复提交的问题。 方法就是: 在struts.xml的action中加入struts的token拦截器 /success.jsp /message.jsp
  • token (需要django的rest_framework.authtoken模块) 客户端通过post请求发送username和password到服务器端,服务器端验证用户名和密码正确后返回一个token 客户端接受返回的token并保存 客户端发起请求时需要在请求...
  • public static void cacheToken(Context context, String token){ Editor e = context.getSharedPreferences(APP_ID, context.MODE_PRIVATE).edit(); e.putString(KEY_TOKENtoken); e.commit...
  • Session cookie token

    2020-02-20 13:49:14
    token Session cookie
  • token vs session

    2021-02-19 17:08:47
    token vs session 功能上都是用来保持会话 session是服务器端存储来访用户信息从而保持会话的对象。服务器重启session消失。基于cookie session状态保持原理 一段话概括:用户拿着数据访问服务器后,服务器会将数据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,824
精华内容 6,729
关键字:

tokensession