Я использую Spring Security и Spring i18n. Это моя конфигурация безопасности:
<security:http access-denied-page="/denied.htm">
<security:form-login login-page="/login.htm"
authentication-failure-url="/login.htm?login_error=true" />
<security:intercept-url pattern="/denied.htm" filters="none"/>
<security:intercept-url pattern="/login.htm*" filters="none"/>
<security:intercept-url pattern="/*" access="IS_AUTHENTICATED_FULLY" />
<security:logout/>
</security:http>
Кроме того, я установил authenticationManager
для базы данных с кодировкой MD5 для пароля. Охрана работает просто отлично. Мой конфиг i18n:
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages" />
</bean>
Он отлично работает с чтением локалей из HTTP-запроса веб-браузера, но я хочу, чтобы он изменил локаль, если я нажму на ссылку на странице (добавляет параметр ?lang=hr
на текущую страницу). Поэтому, когда я добавляю это, локаль вообще не меняется:
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang" />
</bean>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="en"/>
</bean>
<bean id="handlerMapping" class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
<property name="interceptors">
<ref bean="localeChangeInterceptor" />
</property>
</bean>
Так что у меня есть несколько вопросов.
- Почему перехват локали вдруг не работает и как это исправить?
- Как прочитать текущую выбранную локаль для сеанса пользователя из класса Java? У меня есть класс Java, где мне нужно получить сообщение Spring из файла
message_en.properties
или message_hr.properties
. Джаспер рапорт.
- Мне нужно добавить перехватчик (или что-то в этом роде), чтобы ограничить пользователя паролем по умолчанию только для работы со страницей
/changePassword.htm
. Какое самое простое решение?
Большое спасибо