Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / spring Multiple HttpSecurity javaconfig / 25 сообщений из 33, страница 1 из 2
27.11.2015, 11:29
    #39114716
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
Добрый день !
запутался в простой задачи :

Хочу разнести авторизацию по урлам :

есть набор ролей - это пользователи им ROLE_SELLER -

им доступны 2 url

.antMatchers("/message/**").hasRole("SELLER")
.antMatchers("/report/**").hasRole("SELLER")

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

и пользователи admn и root

им доступны два урла

.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/support/**").hasRole("SUPPORT")

на эти урлы будет бейски авторизация (чтобы видеть что я на них хочу )
( пользователи будут в памяти )

вот пытаюсь написать конфиг с соответсвии сд окументацией :


http://docs.spring.io/spring-security/site/docs/3.2.x/reference/htmlsingle/#multiple-httpsecurity


вот ВОПРОС : как и где расставить аннотации -

1) где должен быть аннотации

@Configuration
@ComponentScan({"ru.stoloto.s3.config"})
@EnableWebSecurity
@EnableGlobalMethodSecurity(jsr250Enabled = true, prePostEnabled = true)


2)

где вот это нужноо писать?

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

BCryptPasswordEncoder encoder = passwordEncoder();

auth.inMemoryAuthentication().passwordEncoder(encoder);
auth.inMemoryAuthentication().withUser("root").password("root").roles("ADMIN", "USER", "SUPPORT");

}


потом хочу заменить на LDAP - будет работать из локальной сети и только...

вот код примера :

файл для всей настройки (нужно ли указывать эти наннотациина ним или вынести в отдельный клааас ?)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(jsr250Enabled = true, prePostEnabled = true)
public class SecurityConfig {

// настройка пользователей :  создал свой UserAuthenticationProvider

    @Configuration
    @Order(0)
    public static class UserLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            auth.authenticationProvider(new UserAuthenticationProvider());
        }

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                    .authorizeRequests()
                    .antMatchers("/", "/about", "/resources/**").permitAll()
                    .antMatchers("/login").permitAll()
                    .antMatchers("/message/**").hasRole("SELLER")
                    .antMatchers("/report/**").hasRole("SELLER")
                    .anyRequest().authenticated()
                    .and().rememberMe()
                    .and().formLogin()
                    .permitAll()
                    .defaultSuccessUrl("/", true);

            http
                    .sessionManagement().maximumSessions(1);
            http
                    .logout()
                    .invalidateHttpSession(true)
                    .deleteCookies("JSESSIONID,SPRING_SECURITY_REMEMBER_ME_COOKIE").permitAll()
                    .and()
                    .csrf();
            
                 http
                    .addFilterBefore(new UserAuthorizationFilter(), UsernamePasswordAuthenticationFilter.class);

        }

        @Override
        public void configure(WebSecurity web) throws Exception {
            web
                    .ignoring()
                    .antMatchers("/resources/**", "/favicon.ico"); 
        }

    }

//  

    @Bean
    public static BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
//
    public static class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {

    }
//

    public static class MvcWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

        @Override
        protected Class<?>[] getRootConfigClasses() {
            return new Class[]{SecurityConfig.class};
        }

        @Override
        protected Class<?>[] getServletConfigClasses() {
            return null;
        }

        @Override
        protected String[] getServletMappings() {
            return new String[]{"/"};

        }

    }

// тут глобальный веб конфиг для всех 
   @Configuration
    @EnableWebMvc
    public static class WebConfig extends WebMvcConfigurerAdapter {

        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/favicon.ico").addResourceLocations("/favicon.ico").setCachePeriod(CACHE_PERIOD);
            registry.addResourceHandler("/resources/**").addResourceLocations("/resources/").setCachePeriod(CACHE_PERIOD);
        }

        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/401").setViewName("500");
            registry.addViewController("/about").setViewName("about");
            registry.addViewController("/admin").setViewName("admin");
            registry.addViewController("/").setViewName("index");
            registry.addViewController("/message/**").setViewName("message");
            registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
        }

        @Bean(name = "jspViewResolver")
        public InternalResourceViewResolver jspViewResolver() {
            InternalResourceViewResolver resolver = new InternalResourceViewResolver();
            resolver.setPrefix("/WEB-INF/jsp/");
            resolver.setSuffix(".jsp");
            resolver.setViewClass(JstlView.class);
            resolver.setOrder(1);
            return resolver;
        }


        @Bean(name = "messageSource")
        public MessageSource messageSource() {
            ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
            messageSource.setUseCodeAsDefaultMessage(true);
            messageSource.setBasenames("errors", "message");
            messageSource.setCacheSeconds(5);
            messageSource.setFallbackToSystemLocale(false);
            messageSource.setDefaultEncoding("UTF-8");
            return messageSource;
        }

        @Override
        public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
            configurer.enable();
        }


    }



}




Как добавить авторизацию для админа ?

и настроить ее на урлы

.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/support/**").hasRole("SUPPORT")

?

отбельным классом ,по аналогии с UserLoginWebSecurityConfigurerAdapter ?
...
Рейтинг: 0 / 0
27.11.2015, 17:29
    #39115123
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
http://stackoverflow.com/questions/25794680/multiple-authentication-mechanisms-in-a-single-app-using-java-config

нашел только такое решение - через

Код: java
1.
2.
  @Value("${include.test.users}")
      private boolean includeTestUsers;



но это не то что мне нужно ...



если я создаю два файла :

один для пользователей :

UserWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter

второй для админа :

TerminalWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter

и указываю им порядок - через @Order(1) и @Order(0) - спользуется только один ...

в не а не оба на разные url

упрошу вопрос :


Хочу чтобы url
/admin - был по байсик авторизации
/user - через форму и свой UserAuthenticationProvider
...
Рейтинг: 0 / 0
27.11.2015, 19:40
    #39115208
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
поясните в чем разница :

когда я пищу в конфиге :

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
@Configuration
@Order(0)
@EnableWebSecurity
public class TerminalWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

 @Override
    protected void configure(HttpSecurity http) throws Exception {
     http
                .authorizeRequests()
                .antMatchers("/media/**").permitAll()


}


    @Override
    public void configure(WebSecurity web) throws Exception {
        web
                .ignoring()
                .antMatchers("/media/**")
            
    }


}




Зачем указывать : .antMatchers("/media/**").permitAll()

если потом идет

.ignoring()
.antMatchers("/media/**")


можно же оставить только :

.ignoring()
.antMatchers("/media/**")


Ведь так?


а во всех примерах указывается именно так как я описал :

сначала permitAll - потом ignoring


в чем логика???
...
Рейтинг: 0 / 0
30.11.2015, 08:41
    #39115998
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
Atum1,

отвечу сам себе -

в общем виде задача не решается :

нельзя в одном веб проекте иметь два конфига по секьюрности и два конфига по webconfig / - и как следствие два диспетчера сервлетов - и два аворизационных модуля ...

можно лишь создать список провайлеров - которые будут последовательно вызываться ,с целью авороизации и привязки к сессии принципала - но сама сессия будет одна ... к ней лишь будут привязываться куки и новые заголовки в зависимости от типа авторизации

вроде так ...


решение в лоб - в наследоваться от implements AuthenticationProvider

а в методе -

public Authentication authenticate(Authentication authentication) throws AuthenticationException

кастить к своему типу : authentication - > ? extends UsernamePasswordAuthenticationToken

и уже по нему навешивать роли и права доступа к сессии и пользователю ...


красивого решения нет ((
...
Рейтинг: 0 / 0
30.11.2015, 10:03
    #39116064
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
Atum1авторизация будет через удаленный сервер .
это что значит? SSO?
...
Рейтинг: 0 / 0
30.11.2015, 10:19
    #39116079
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
Petro123Atum1авторизация будет через удаленный сервер .
это что значит? SSO?


самописная ернда - в которой в каждом запросе нужно передавать авторизационные данные - свой закрытый протокол на основе http

в данном случае серверная часть spring - будет клиентом для внутреннего сервера .
...
Рейтинг: 0 / 0
30.11.2015, 10:31
    #39116090
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
Atum1самописная
может поэтому и мучился? Взял бы отработанные технологии. Ты наверно уже вырос из спринга. Он тут вообще не при чём. IMHO
...
Рейтинг: 0 / 0
30.11.2015, 13:39
    #39116282
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
Petro123Atum1самописная
может поэтому и мучился? Взял бы отработанные технологии. Ты наверно уже вырос из спринга. Он тут вообще не при чём. IMHO

ну как не причем :

Хочу такое :

на одном сайте (один вар ) - чтобы были урлы как для пользователей , так и для админов - и при этом авторизация должна быть в разных системах ...
...
Рейтинг: 0 / 0
30.11.2015, 14:55
    #39116368
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
Atum1чтобы были урлы как для пользователей , так и для админов - и при этом авторизация должна быть в разных системах .
дак ты делай как другие делают. Иначе мен ничего непонятно.
- для админов есть админка
- если админки нет, то это обычные пользователи с правами.
- "авторизация в разных системах" мне непонятно.
Чтобы дырок было больше?
...
Рейтинг: 0 / 0
30.11.2015, 16:59
    #39116553
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
Petro123Atum1чтобы были урлы как для пользователей , так и для админов - и при этом авторизация должна быть в разных системах .
дак ты делай как другие делают. Иначе мен ничего непонятно.
- для админов есть админка
- если админки нет, то это обычные пользователи с правами.
- "авторизация в разных системах" мне непонятно.
Чтобы дырок было больше?


- пользователи авторизуются через внешний сервер
- админу через локальную (свою ) базу
...
Рейтинг: 0 / 0
30.11.2015, 18:02
    #39116633
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
Atum1- пользователи авторизуются через внешний сервер
уже писал - это SSO (поиск)
...
Рейтинг: 0 / 0
01.12.2015, 16:59
    #39117585
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
Petro123,

почему то перестал отрабатывать UserAuthenticationProvider implements AuthenticationProvider

https://github.com/isalnikov/SecurityProvider


т.е. я как думал - написано что есть некий AuthenticationManager ( возможно его так нужно создать??? )

Хотя есть по умолчсанию AuthenticationManagerBuilder ??? видимо спринг создает его сам ...

а в мне уже нужно делать регистрацию своих AuthenticationProvider (LDAP база итд )

если AuthenticationProvider .... для того нужна цепочка вида :

в моем примере - UserAuthenticationProvider - регистрируется и игнорируется ...

почему он не отрабатывает??? что не так ?

цепочка поиска и проверки данных пользователя в AuthenticationManager через список AuthenticationProvider такая :

для каждого AuthenticationProvider - есть свой - AuthorizationFilter -

если он в методе

@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {


вернется null - то AuthenticationManager берет след из списка зарегестрированных AuthenticationProvider

в моем примере - сначала должен провериться мой самописный провайдер - потом базовый ...

но этого не происходит ???!!!
...
Рейтинг: 0 / 0
01.12.2015, 17:02
    #39117590
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
Atum1,
у меня счас проект SSO делаю так:
Valve Tomcat
public class SubdomainSessionValve extends ValveBase {
- там подменяешь куки сессионные на любые что нужно.
...
Рейтинг: 0 / 0
01.12.2015, 17:09
    #39117595
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
как я понял из документации и книги - авторизация должна работать и создавать свой

implements UserDetailsService
ненужно .

тут есть пример ,похожий на мой ...

http://stackoverflow.com/questions/25794680/multiple-authentication-mechanisms-in-a-single-app-using-java-config



как описано тут

http://it-ebooks.info/book/5195/



http://pixs.ru/showimage/Snimokekra_8947108_19709168.png][IMG] http://i10.pixs.ru/storage/1/6/8/Snimokekra_8947108_19709168.png [/IMG]
...
Рейтинг: 0 / 0
01.12.2015, 17:10
    #39117597
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
Petro123Atum1,
у меня счас проект SSO делаю так:
Valve Tomcat
public class SubdomainSessionValve extends ValveBase {
- там подменяешь куки сессионные на любые что нужно.


я разобраться хочу - что это за функционал который не работает ...

ведь работало ... что где какую аннотацию нужно поставить то?
...
Рейтинг: 0 / 0
01.12.2015, 17:12
    #39117600
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
Atum1,
ну, ты предпочитаешь спринг и конфигурировать. (п.п. 4) Configure spring security).
Я предпочитаю программировать (как выше с Valve).
Про спринг я пас.
Удачи!
...
Рейтинг: 0 / 0
01.12.2015, 17:13
    #39117601
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
Atum1ведь работало ...
у кого? Когда? Вроде все молчат.
...
Рейтинг: 0 / 0
01.12.2015, 17:14
    #39117604
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
т.е.

идея такая я именю совй токен - UserAuthorizationToken в котором есть поле ssl - и свой UserAuthorizationFilter


при авторизации я получаю заголовки и если в них нет нужного мне заголовка - значит запрос пришел не от моего пользователя и для его атворизации мне нужно отправить его на другой провайдер ...
...
Рейтинг: 0 / 0
01.12.2015, 17:15
    #39117605
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
Petro123Atum1,
ну, ты предпочитаешь спринг и конфигурировать. (п.п. 4) Configure spring security).
Я предпочитаю программировать (как выше с Valve).
Про спринг я пас.
Удачи!

тьк а где пример глянуть ? Valve
...
Рейтинг: 0 / 0
01.12.2015, 17:20
    #39117615
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
Atum1Petro123Atum1,
ну, ты предпочитаешь спринг и конфигурировать. (п.п. 4) Configure spring security).
Я предпочитаю программировать (как выше с Valve).
Про спринг я пас.
Удачи!

тьк а где пример глянуть ? Valve
обещай отписаться, т.к. я делаю его
http://m.habrahabr.ru/post/51266/
...
Рейтинг: 0 / 0
01.12.2015, 17:23
    #39117618
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
...
Рейтинг: 0 / 0
01.12.2015, 17:26
    #39117625
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
Petro123Atum1пропущено...


тьк а где пример глянуть ? Valve
обещай отписаться, т.к. я делаю его
http://m.habrahabr.ru/post/51266/

Первый вопрос :


Petro123Вы делаете проект на java под Tomcat. И решили организовать разделы своего сайта в виде поддоменов.
К примеру, на сайте www.domen.xx сделать разделы: mail.domen.xx, user.domen.xx и т.п. В какой-то момент разработки вы с удивлением обанружите, что пользовательская сессия вопреки ожиданиям существует строго в рамках одного домена. То есть юзер авторизовавшись на главной странице (www.domen.xx), переходя почту (mail.domen.xx), теряет авторизацию.

Дело в том, что сессия привязывается к клиенту через cookie с именем JSESSIONID и с пустым доменом. А когда домен не указан, браузер использует полный текущий домен. То есть сессия привязывается не к «domen.xx», а к «www.domen.xx». По неизвестной мне причине в Томкэте нет настроек позволяющих управлять этим поведением.



Разве для этих целей не предназначен cas сервер авторизации ???
CasAuthenticationProvider
...
Рейтинг: 0 / 0
01.12.2015, 17:30
    #39117630
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
...
Рейтинг: 0 / 0
01.12.2015, 17:58
    #39117673
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
Atum1тут
упс...я думал, у тебя работало)
Atum1Разве для этих целей не предназначен cas сервер авторизации ???
CasAuthenticationProvider
уже писал, кто что любит.
Я так задолбался с этими конфигами на шибболе сервере......
Отлаживать же невозможно? Значение переменной не посмотреть. Всё в конфигах.
IMHO
...
Рейтинг: 0 / 0
01.12.2015, 18:16
    #39117686
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring Multiple HttpSecurity javaconfig
Petro123Atum1тут
упс...я думал, у тебя работало)


вчера и у меня работа - а сегодня что то где то поправил и все ...

где то аннотацию снял ...:(
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / spring Multiple HttpSecurity javaconfig / 25 сообщений из 33, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]