Реализация контроллера для авторизации - PullRequest
0 голосов
/ 27 сентября 2011

Я использую Spring и Spring Security 3 в своем приложении. Все мои клиенты являются статическими файлами HTML. У меня есть панель навигации, которая включает в себя такие кнопки, как:

  • Список
  • Редактировать
  • Удалить
  • Обновление

Когда пользователь нажимает на любую из них, другая страница загружается внизу. У пользователей есть роли в моем приложении. Некоторые пользователи не имеют права редактирования и удаления, в то время как другие имеют. Эти кнопки должны быть видны пользователям, имеющим авторизацию. Если у пользователя нет прав на редактирование, он не должен видеть кнопку редактирования. У меня есть кнопки, определенные в файле HTML: navigation.html. Я понял, что: там будет много файлов navigation.html. Одна из них включает в себя все кнопки (для администратора), одна из них просто включает в себя кнопку списка. Если пользователь запрашивает этот файл navigation.html, я хочу отправить правильный. Так что я могу иметь эту способность:

<logout logout-url="/j_spring_security_logout" logout-success-url="/login.html"/>

аналогично тому, что этот пользователь будет запрашивать этот файл с URL (например, как / navigation) Там будет контроллер для обработки, поэтому вернет любой из этих файлов навигации.

Этот дизайн звучит правильно? Если так, как я могу это реализовать? Любые другие простые решения приветствуются. Я новичок в Spring и Spring Security.

Ответы [ 2 ]

2 голосов
/ 27 сентября 2011

Для общего использования Spring Security вам не нужно писать собственный код, чтобы включить авторизацию. Обычно я настраиваю Spring Security в XML для контроля доступа к различным ресурсам на основе ролей. Затем я аннотирую контроллеры и / или методы-обработчики для более точного ограничения.

Пример:

<?xml version="1.0" encoding="UTF-8"?>

<beans:beans 
    xmlns:security="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                    http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">

    <security:global-method-security secured-annotations="enabled">
    </security:global-method-security>

    <security:http auto-config="true" disable-url-rewriting="true">
       <security:intercept-url pattern="/*.do" access="ROLE_USER" />
       <security:intercept-url pattern="/index.jsp" access="ROLE_USER" />
       <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
       <security:intercept-url pattern="/login.jsp" filters="none" />
       <security:form-login login-page="/login.jsp" />
       <security:logout />
    </security:http>

    <security:authentication-manager>
        <security:authentication-provider>
            <security:password-encoder hash="md5" />
            <security:jdbc-user-service data-source-ref="my-ds"/>
        </security:authentication-provider>
    </security:authentication-manager>

</beans:beans>

А потом в контроллере:

@Secured({"ROLE_SPECIAL_USER"})
@RequestMapping("/somespecial.do")

В JSP:

<%@ taglib prefix="authz" uri="http://www.springframework.org/security/tags" %>
<authz:authorize ifAnyGranted="ROLE_SPECIAL_USER">
   ...some special JSP code...
</authz:authorize>
0 голосов
/ 28 сентября 2011

Исходя из того, что вы используете статический HTML, я думаю, что выбранный вами дизайн будет разумным.

Имейте контроллер, который отображается на navigation.html, и он будет просто просматривать предоставленные полномочия текущего пользователя и возвращать правильное статическое имя представления html для файла html, который имеет все (и только) соответствующие элементы управления.

...