Session实现防止会员下载资源被盗链

1.通常,我们使用会员身份登录一个资源网站,然后下载里面的资源时点开那个链接就可以直接进行下载了.(不管这个链接是action也好,是html也好,反正都是进行文件下载的)但是如果我们不对这个链接进行设置的话,就会出现这样一个情况:我们将这个链接的地址发送给其他人,而这些人并没有这个网站的会员,或者说根本就没有注册过这个网站,但是因为这是一个单纯的链接,那么将会使这些人也可以打开这个链接进行同样的下载操作,这就是我们所说的盗链.
2.解决这个办法其实很简单,在这个网页上定义一个随机数,然后设置一个session范围内的变量(因为session的作用域是当前会话),并且在资源下载链接中对这个url添加一个请求参数:id=这个随机数,然后当点击这个链接时,使用interceptor拦截器或者直接在execute方法中进行判断,检测用户是否是使用会员登录进入这个资源网站然后下载的,判断的方式是:判断session中的id变量和request请求参数中的id变量的值是否相等,如果相等,则是会员,如果不相等,要么就不是会员,要么就是直接使用链接进行下载的,都进行相应的拦截
3.下面是关键的实现代码:
//资源页面resource.jsp
...
<%
    int rand = (int)(Math.randon() * 1000);
    session.setAttribute('id' , rand);
    ...
%>
...
<a href='download.action?id='<%=rand%>&...''>资源下载</a>
...

//download.java
public class download extends ActionSupport{
    private String id;
    ...
    //omit setter and getter
    @Override
    public String execute(){
        int logid = Integer.parseInt(getId());
        String sessidStr = ActionContext.getContext().getSession().get('id');
        int sessid = Integer.parstInt(sessidStr);
        if(sessid == logid){
            //编写下载资源的代码
        }
        else if(sessidStr == null){
            //用户使用盗链进行下载的情况
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值