english | блог | контакт
Wed, 20 Nov 2013 @ 13:25

Spring, Lifecycle, destroy-методы

java spring

Сегодня обнаружили великолепный нюанс: если в spring ApplicationContext не закрывать контекст руками и при этом не зарегистрировать shutdown hook (registerShutdownHook), то он, очевидно, не закроется и все Lifecycle бины, естественно, не будут остановлены, destroy-методы не будут вызваны.
Кстати, в destroy-методах логгирование через slf4j, log4j и прочие логгеры не работает - они скорее всего уже успели закрыться в своих shutdown-хуках.

Wed, 11 May 2011 @ 15:33

Ещё один способ конфигурирования контекста в Spring 3.0

java spring

Случайно наткнулся. В spring 3.0 появилась такая штука как AnnotationConfigApplicationContext и AnnotationConfigWebApplicationContext. В соответствии с названиями позволяют конфигурировать контекст не в виде XML-файла, а с помощью аннотаций и методов класса, возвращающих готовые бины.

IntelliJ IDEA в версии 10.0.3 их пока не понимает (навигация между бинами отсутствует), зато пользователи сред не понимающих XML-конфигурацию, наверное, наслаждаются валидацией на уровне java-синтаксиса.

документация на офсайте

Mon, 07 Jun 2010 @ 14:58

Spring, ApplicationEventPublisher и ApplicationListener

java spring

Какое-то время меня волновал вопрос: как работают события в Spring?
Понятное дело, приложение через ApplicationEventPublisher.publishEvent(...) их публикует, а различные реализации ApplicationListener.onApplicationEvent(...) эти события получают и обрабатывают.

Но меня волновал вопрос: что если события поступают быстрее, чем обрабатываются?

Сегодня методом "научного тыка" было выяснено, что publishEvent() не возвращает управление до тех пор, пока событие не обработано.

Дальше код:
читать дальше

Mon, 15 Mar 2010 @ 14:50

Конфигурирование Acegi [2]

acegi java spring авторизация

Начиная с версии 2.0 (да, сейчас уже есть 3-я версия) в Spring-е начали активно использовать неймспейсы. К сожалению, все исходники, с которыми мне пришлось работать, были написаны с использованием spring 1.2 и о неймспейсах, как и о прочих плюшках, приходится узнавать самостоятельно.

Ранее я собрал шаблонный конфиг, который предполагал использовать в будущем. Вообще, понимание того, как оно работает "изнутри", за шторкой неймспейсов - хорошо. Но вместо полотна на 2-3 страницы вполне можно использовать такой код:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="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-2.0.xsd
      http://www.springframework.org/schema/security
      http://www.springframework.org/schema/security/spring-security-2.0.4.xsd">

    <http auto-config='true'>
        <intercept-url pattern="/anon/*" filters="none"/>
        <intercept-url pattern="/**" access="ROLE_ADMIN" />
        <form-login login-page="/anon/login.jsp"/>
    </http>

    <authentication-provider>
        <user-service>
            <user name="admin" password="123" authorities="ROLE_ADMIN" />
        </user-service>
    </authentication-provider>

</beans:beans>


В данном случае меньше = лучше :)

Читаю Spring Secutiry reference.

Fri, 25 Dec 2009 @ 09:08

Конфигурирование Acegi

acegi spring авторизация

Эта же конфигурация с использованием неймспейсов

Так сложилось, что я не знаю ни одного человека, которому бы нравилось составлять "с нуля" XML-конфигурации. И сам я здесь не исключение.

Поэтому привожу пример конфигурации Acegi (Spring-Security) с комментариями.

Версия Spring 2.5.6, Spring-Security (Acegi) 2.0.5.
читать дальше

Mon, 23 Nov 2009 @ 11:22

Ещё одно "почему не стоит" складывать шаблоны в доступную извне папку

mvc spring

javax.servlet.jsp.JspTagException: No message found under code 'web.log.attention' for locale 'ru'.
Одна JSP-шка работает, практически такая же рядом - нет.

Копали минут 15, пока не всплыла простая ошибка: обращение к первой происходило через DispatcherServlet и маппинг page1.html, а ко второй напрямую, как page2.jsp.
Соответственно, в меру своих сил страница пыталась отобразиться, но ей явно не хватало глубинных связей с фреймворком :)

Fri, 23 Oct 2009 @ 17:28

wicket: авторизация, wasp, swarm, spring и acegi

acegi java spring wicket авторизация

В wicket 1.3 была возможность реализовывать авторизацию клиентов с помощью модулей wasp/swarm. С приходом версии 1.4, насколько я понял, модули wicket-security из wicket-stuff были молча забыты и вместо них используется acegi.

Spring Security and Wicket-auth-roles - пример использования спринговой авторизации

Пример простейшей конфигурации acegi с использованием неймспейсов.

Кстати, даже не зная как делать "правильную связку wicket-acegi", имя уже авторизованного посредством spring-security пользователя можно получить через

String userName = SecurityContextHolder.getContext().getAuthentication().getName();