Весна + Весна безопасности + плитка. Как установить форму входа в систему с определением страницы плитки? - PullRequest
3 голосов
/ 27 января 2011

У меня есть веб-приложение spring_tiles, и теперь я пытаюсь добавить в него защиту Spring:

Это мир моего TilesConfig.xml:

 <definition name="loginPage" extends="commonPage">
  <put-attribute name="body" value="/WEB-INF/tiles/jsp/login_body.jsp" />
 </definition> 

Вот идет моя весенняя картографическая часть:

<bean id="urlMapping"
  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="interceptors">
   <list>
    <ref bean="openSessionInViewInterceptor" />
   </list>
  </property>
  <property name="mappings">
   <props>
    <prop key="/main.htm">mainController</prop>
    <prop key="/category.htm">viewCategoryController</prop>
    <prop key="/good.htm">goodController</prop>
    <prop key="/registration.htm">registrationController</prop>
    <prop key="/login.htm">?</prop>
   </props>
  </property>
 </bean>

А вот часть из applicationContext-security.xml:

 <http auto-config='true'>
  <intercept-url pattern="/**" access="ROLE_USER" />
  <intercept-url pattern="/css/**" filters="none"/>
  <intercept-url pattern="/js/**" filters="none"/>
  <intercept-url pattern="/login.htm*" filters="none"/>
  <form-login login-page="/login.htm" />
 </http>

Но мне интересно, как мне настроить определение страницы плиток для отображения. На всех других страницах я использовал контроллеры, но я полагаю, что в этом случае я не должен использовать никакой loginController, потому что Spring Security делает это вместо этого.

Итак, вот мой вопрос: как отобразить тайлы loginPage в /login.htm в рамках весенней безопасности?

Ответы [ 3 ]

2 голосов
/ 14 мая 2013

Другим вариантом является следующий контроллер:

@Controller
@RequestMapping("/login")
public class LoginController {

    @RequestMapping(method = RequestMethod.GET)
    public String login(Locale locale, Model model) {
        return "login";
    }

    @RequestMapping(value = "/error", method = RequestMethod.GET)
    public String loginWithError(Locale locale, Model model) {
        model.addAttribute("error", true);
        return "login";
    }
}

В файле security-context.xml настройте вход в систему следующим образом:

<form-login login-page="/login" authentication-failure-url="/login/error" />

В файле views.xml объявитепредставление входа в систему:

<definition name="login" extends="template">
    <put-attribute name="title" value="Nuevo Usuario"/>
    <put-attribute name="body" value="/login.jsp"/>
</definition>

наконец, в login.jsp, чтобы показать ошибку, если она есть, используйте следующий код:

<c:if test="${not empty error}">
    <font color="red"> Error al ingresar. <br /> Motivo :
        ${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message}
    </font>
</c:if>
2 голосов
/ 27 января 2011

По умолчанию в конфигурации для безопасности пружин с тайлами нет ничего конкретного.

Если имя вашей страницы входа в систему имеет значение loginPage, я полагаю, у вас должно быть что-то похожее на следующееapplicationContext-security.xml

<intercept-url pattern="/loginPage" filters="none"/>
<form-login login-page="/loginPage" />

Если вы используете Spring Security, страница входа будет иметь URL-адрес POST, который будет равен /j_spring_security_check (по умолчанию).Это эквивалент loginController.

0 голосов
/ 28 января 2011

Я нашел способ сделать это.В весенний конфиг я добавил это:

<bean id="loginController"
    class="org.springframework.web.servlet.mvc.ParameterizableViewController">
    <property name="viewName" value="loginPage" />
</bean>

И, соответственно, добавьте в отображение:

<prop key="/login.htm">loginController</prop>

Плитки и конфигурации безопасности остались прежними.

...