2015-12-20 2 views
0

В Grails URL-адрес, как этотСкрыть ID в URL

http://localhost:8080/MyApp/show/2 

есть способ, чтобы скрыть или зашифровать ID Часть

/2 

мне нужно сделать, чтобы это предотвратить для доступа к другим данным, например, мой идентификатор равен 3, я мог получить доступ к другим данным пользователя, набрав

/show/4 
+0

Зачем вам это нужно? можете ли вы предоставить более подробную информацию? потому что кажется, что у такого вопроса может быть много возможных ответов, и никто из них не будет прав –

+0

ОК, я вижу. то кодирование, скрытие, POST или что-то подобное не поможет. вам нужен плагин безопасности, см. плагин Spring-security-core. –

+0

@IgorArtamonov. Я устал ** плагин Spring Spring **, но я обнаружил, что кто-то получил указанную роль в действии ** @ Secure ('ROLE_UESR') ** может получить доступ к другим данным для одного и того же действия. – grails

ответ

0

Вы можете кодировать URL-адрес. Если вы замените 2 на %32, браузер все равно будет интерпретировать его как символ 2. Вот complete list символов.

0

Вы можете отправить запрос POST вместо GET - это простой способ скрыть такие параметры запроса f.e. в файлах журналов сервера.

Или вы можете играть с GRAILS codecs.

+0

Я сделал так, как вы предложили 'static allowedMethods = [index: ['POST', 'GET'], show: 'POST']', чтобы отправить все методом POST, но ничего не изменилось – grails

+0

Пожалуйста, ознакомьтесь с этими ответами: http: // stackoverflow.com/questions/8384931/how-to-only-accept-post-variables-in-grails –

0

Я бы не скрывал идентификатор от URL-адреса. Зачем? потому что это только замаскирует проблему.

Рассмотрим, имеющий класс, определяемый как:

class Post { 

String title 
String content 
User user //you need this to keep track of the posts owner 
//You could use your own custom class or the one used in spring security 

... 
} 

Если вы используете Spring Security Ядро, вы должны использовать fucntion аналогичную:

def springSecurityService 


@Secured(['ROLE_USER']) 
def myFunction(Long id){ 
    def postInstance = Post.read(id) 

    if(postInstance){ 
    if (postInstance.user.id ==(long)springSecurityService.principal.id){ 
    // springSecurityService?.principal?.id retrieves the id of the user in session 
    //... redirect to details of whatever you need 
    }else{ 

    //... redirect because it is not the owner of the post 

    } 

} 

else{ 

    //... Redirect or something 
    } 

} 

Если вы используете простую сеанса необходимо будет иметь такую ​​функцию, как

def myFunction(Long id){ 
    def postInstance = Post.read(id) 
    long userId = session["user_id"] 

    if(postInstance && userId > 0){ 
    if (postInstance.user.id ==userId){ 
    //... redirect to details of whatever you need 
    }else{ 

    //... redirect because it is not the owner of the post 

    } 

} 

else{ 

    //... Redirect or something 
    } 

} 

Логика очень похожа. Еще в моем скромном мнении вы должны использовать плагин Spring Security.