如何在spring中限制对url的直接访问

时间:2014-04-01 07:58:19

标签: java javascript android jquery spring-security

在Web应用程序中,当用户访问学生列表页面时,屏幕会显示具有超链接的学生姓名列表。仅显示允许用户查看的学生姓名。当用户单击超链接时,将打开一个新窗口,显示用户的详细信息。子窗口的地址栏显示如下URL。

myhost:8080 / studentID = 100

问题是用户可以更改参数studentID的值并获取他/她没有资格看到的其他学生的详细信息(因此未显示在上一个列表屏幕中)。这是一个安全问题 - 网址操纵。

我能想出一些阻止这种情况的方法。

3 个答案:

答案 0 :(得分:1)

使用Spring Framework实现基于角色的安全性

教程您可以参考:
http://www.mkyong.com/spring-security/spring-security-access-control-example/

答案 1 :(得分:0)

您需要使用Cookie和唯一会话ID。因此,用户登录并被赋予唯一密钥,该密钥对应于具有这些临时访问令牌或会话ID的数据库表。通常这些令牌仅在一段时间内有效。在服务器端,您可以测试数据库的cookie值并重定向不允许访问的用户。祝你好运,你提出正确的问题就一直坚持下去!

答案 2 :(得分:0)

您无需打开单独的窗口。这是一些例子。我在这里使用Jquery。

<script type='text/javascript' src='http://code.jquery.com/jquery-1.6.4.js'></script>

示例HTML

<div id="blockbox" >

    <div class="contents">
        <div id="data"></div>
        <div class="close">close</div>
    </div>
</div>

<div>
<a href="#" stid='1'>Name1</a>
<a href="#" stid='2'>Name2</a>
<a href="#" stid='3'>Name3</a>
<a href="#" stid='4'>Name4</a>
<a href="#" stid='5'>Name5</a>
</div>

CSS

div.contents
{

    color:#111;
    font-family: "Calibri";
    background-color: #eee;
    text-align: left;
    min-height: 100px;
    box-shadow: 0px 0px 7px #000;
    position: absolute;
    width:200px;
    height: 10px;
    margin-left:20%;
    margin-top:20%;
    padding: 16px;
    z-index:2000;
    display: inline-block;
}

div.contents .close
{
    width: 20px;
    height: 24px;
    position: absolute;
    top: 0px;
    right: 30px;
    cursor: pointer;

}

Jquery的

$(document).ready(function(){
    $("#blockbox").fadeOut(0);

    $("div a").click(function(e){
    e.preventDefault();
       $("#blockbox").fadeIn(100);
        //$("#data").html($(this).attr("stid"));

        //This will sent studentID to relevent page
        //and retrieve the result
        $.post("myhost:8080", 
        {
            studentID:$(this).attr("stid"),
        }
        ).done(function(data) {
            $("#data").html(data);
        });
    });

     $(".close").click(function(e){
       $("#blockbox").fadeOut(100);
    });
});

您的服务器端脚本捕获$ .post方法发送的studentID。我在这里使用php

<?php
$studentID=$_POST['studentID'];
//echo student details
?>

然后数据变量捕获响应并将其添加到#data id

.done(function(data) {
            $("#data").html(data);
        });

Demo here