| 1 | == **Spring Security** |
| 2 | Извадок од нашиот security config:\\ |
| 3 | {{{ |
| 4 | |
| 5 | @Bean |
| 6 | public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { |
| 7 | http |
| 8 | .csrf(AbstractHttpConfigurer::disable) |
| 9 | .authorizeHttpRequests(reg -> reg |
| 10 | .requestMatchers("/", "/login", "/register", "/error", |
| 11 | "/css/**", "/js/**", "/uploads/**", "/logo.png", "catalog").permitAll() |
| 12 | .requestMatchers("/admin/branded-medicines/**").hasAnyRole("ADMIN","PHARMACIST") |
| 13 | .requestMatchers("/admin/**").hasRole("ADMIN") |
| 14 | .requestMatchers("/pharmacist/**").hasRole("PHARMACIST") |
| 15 | .anyRequest().permitAll() |
| 16 | ) |
| 17 | .formLogin(login -> login |
| 18 | .loginPage("/login") |
| 19 | .defaultSuccessUrl("/profile", true) |
| 20 | .permitAll() |
| 21 | ) |
| 22 | .logout(logout -> logout |
| 23 | .logoutUrl("/logout") |
| 24 | .logoutSuccessUrl("/login?logout") |
| 25 | .permitAll() |
| 26 | ) |
| 27 | .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)); |
| 28 | |
| 29 | return http.build(); |
| 30 | } |
| 31 | |
| 32 | |
| 33 | }}} |
| 34 | |
| 35 | Админ рутите (/admin/*) се достапни само за корисници кои се ADMIN, делот за фармацевти (/pharmacist/*) само за PHARMACIST, а клиентски функционалности се ограничуваат по потреба за CLIENT.\\ |
| 36 | Останатите јавни рути се permitAll, а чувствителните се заштитени со hasRole/hasAnyRole (на пр. /admin/branded-medicines/* за ADMIN или PHARMACIST). |
| 37 | Автентикацијата е остварена преку custom login форма и redirect на /profile при успешна автентикација. |