Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Spring Security+Velocity


Автор: Andy_L20066 2.4.2010, 20:56
привет,

вообщем использую Spring security. Ну и вот захотелось прикрутить Velocity... неочень знаком с этим дело... но есть проблема:

как можна в Velocity доступится до параметров сесии???? Решения я по ходу пока не нашел...
у меня есть пейджа которая предлагает пользователю залогинится 
Код

    <c:if test="${not empty param.login_error}">
      <font color="red">
        Your login attempt was not successful, try again.<br/><br/>
        Reason: <c:out value="${SPRING_SECURITY_LAST_EXCEPTION.message}"/>.
      </font>
    </c:if>

    <form name="f" action="<c:url value='j_spring_security_check'/>" method="POST">
      <table>
        <tr><td><fmt:message key="Username"/></td><td><input type='text' name='j_username' value='<c:if test="${not empty param.login_error}"><c:out value="${SPRING_SECURITY_LAST_USERNAME}"/></c:if>'/></td></tr>
        <tr><td>Password:</td><td><input type='password' name='j_password'></td></tr>
        <tr><td><input type="checkbox" name="_spring_security_remember_me"></td><td>Don't ask for my password for two weeks</td></tr>

        <tr><td colspan='2'><input name="submit" type="submit"></td></tr>
        <tr><td colspan='2'><input name="reset" type="reset"></td></tr>
      </table>

    </form>


в пейдже имеется некий параметр param.login_error который берется из конфигурации спринга: 
Код

<form-login login-page="/"
                     default-target-url="/news"
                     authentication-failure-url="/?login_error=1"/>


Есть свой сервис который проверяет какие данные вводил юзер (юзернейм и пароль), если юзера с такими данными нет викидывает иксепшин, соответственно меня редиректит на ту же страницу где param.login_error=1 и соответсвенно появляется текст что мол Bad credentials.
если работаю з jsp - то все нормально, а как Velocity будет знать о этом параметре?

можно конечно сделать так: authentication-failure-url="/?login_error=1"/> сделать редирект на какой то контроллер где вытаскивать аттрибут из сесии и сетать его на страницу, ну что то типа такого получается: 
Код

 @RequestMapping(value = "/loginfailure", method = RequestMethod.GET)
    public ModelAndView get() {
        ModelAndView mav = new ModelAndView();
        mav.setViewName("login");
        ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
        AuthenticationException authenticationException = (AuthenticationException) WebUtils
                .getSessionAttribute(attr.getRequest(), AbstractAuthenticationProcessingFilter.SPRING_SECURITY_LAST_EXCEPTION_KEY);
       
        if (authenticationException != null) {
            mav.addObject("securityException", authenticationException);
           }
        return mav;
    }


ну это чего то так сложно получается: кантроллер отдельный - только для того чтобы что-то сетнуть из сесии...
 smile 

Автор: polosatij 8.4.2010, 16:43
Andy_L20066, 

кодовое слово Velocity Tool.

наследуешь класс от ContextRequest (по-мойму) и получаешь сессию через request.getSession(). это всё чудо. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)