320 | | |
321 | | **Spring Security**\\ |
322 | | Извадок од нашиот security config:\\ |
323 | | {{{ |
324 | | |
325 | | @Bean |
326 | | public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { |
327 | | http |
328 | | .csrf(AbstractHttpConfigurer::disable) |
329 | | .authorizeHttpRequests(reg -> reg |
330 | | .requestMatchers("/", "/login", "/register", "/error", |
331 | | "/css/**", "/js/**", "/uploads/**", "/logo.png", "catalog").permitAll() |
332 | | .requestMatchers("/admin/branded-medicines/**").hasAnyRole("ADMIN","PHARMACIST") |
333 | | .requestMatchers("/admin/**").hasRole("ADMIN") |
334 | | .requestMatchers("/pharmacist/**").hasRole("PHARMACIST") |
335 | | .anyRequest().permitAll() |
336 | | ) |
337 | | .formLogin(login -> login |
338 | | .loginPage("/login") |
339 | | .defaultSuccessUrl("/profile", true) |
340 | | .permitAll() |
341 | | ) |
342 | | .logout(logout -> logout |
343 | | .logoutUrl("/logout") |
344 | | .logoutSuccessUrl("/login?logout") |
345 | | .permitAll() |
346 | | ) |
347 | | .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)); |
348 | | |
349 | | return http.build(); |
350 | | } |
351 | | |
352 | | |
353 | | }}} |
354 | | |
355 | | Админ рутите (/admin/*) се достапни само за корисници кои се ADMIN, делот за фармацевти (/pharmacist/*) само за PHARMACIST, а клиентски функционалности се ограничуваат по потреба за CLIENT.\\ |
356 | | Останатите јавни рути се permitAll, а чувствителните се заштитени со hasRole/hasAnyRole (на пр. /admin/branded-medicines/* за ADMIN или PHARMACIST). |
357 | | Автентикацијата е остварена преку custom login форма и redirect на /profile при успешна автентикација.\\ |