• Как быть с authorizeRequests после переноса с XML в Java Аннотации?

    В самом сообщении об ошибке есть рекомендация как это исправить:
    role should not start with 'ROLE_' since it is automatically inserted. Got 'ROLE_ADMIN'


    Если посмотреть исходники SpringSecurity там следующая картина:
    private static String hasAnyRole(String... authorities) {
            String anyAuthorities = StringUtils.arrayToDelimitedString(authorities, "','ROLE_");
            return "hasAnyRole('ROLE_" + anyAuthorities + "')";
        }
    
        private static String hasRole(String role) {
            Assert.notNull(role, "role cannot be null");
            if (role.startsWith("ROLE_")) {
                throw new IllegalArgumentException("role should not start with 'ROLE_' since it is automatically inserted. Got '" + role + "'");
            }
            return "hasRole('ROLE_" + role + "')";
        }


    Соотвествено надо переписать JavaConfig следующим образом

    http.
                    authorizeRequests()
                    .antMatchers("/", "/login").permitAll()
                    .antMatchers("welcome").hasAnyRole("USER", "ADMIN")
                    .antMatchers("/admin/**").hasRole("ADMIN")
                        .anyRequest().authenticated()   //TODO Розобраться что это-такое
                    .and()
                    .formLogin()
                    .loginPage("/login").failureUrl("/login?error")
                    .defaultSuccessUrl("/welcome")
                    .usernameParameter("username")
                    .passwordParameter("password")
                    .and().logout()
                    .logoutSuccessUrl("/login?logout");
    Ответ написан
    1 комментарий
  • Генерация JSON с вложенными объектами?

    @Braidner
    Аннотация OneToMany дефолтно имеет fetch Lazy, т.е. Hibernate попытается проинициализировать ее при обращении к коллекции. Если у него не будет открытой сессии, то он выплюнет исключение.
    Но поставив fetch Eager должна вылететь новое исключение stack over flow, из-за рекурсивных зависимостей country<=>city. Для этого в Jacson есть аннотации @JsonManagedReference и @JsonBackReference.
    Посмотрите 2 полезные ссылки:
    stackoverflow.com/questions/3325387/infinite-recur...
    https://github.com/FasterXML/jackson-datatype-hibernate
    Ответ написан
    Комментировать
  • Генерация JSON с вложенными объектами?

    LeEnot
    @LeEnot
    Енот-андроид
    Вам говорят, что вы пытаетесь обратиться к lazy-loaded collection вне сессии Hibernate. Можно поменять тип загрузки, можно добавить @JsonIgnore перед @OneToMany
    Ответ написан
    Комментировать
  • Как реализовать в Java возврат к началу класса?

    EugeneP2
    @EugeneP2
    Java Dev
    Как то так обычно это делается
    package ru.toster.java.q241826;
    
    import java.util.Date;
    import java.util.Scanner;
    
    public class App {
    
    	public static void main(String[] args) {
    
    		Scanner scnr = new Scanner(System.in);
    
    		while (true) {
    
    			System.out.print("enter command>");
    			String command = scnr.nextLine();
    
    			if ("help".equals(command)) {
    				printListCommand();
    			} else if ("date".equals(command)) {
    				printDate();
    			} else if ("time".equals(command)) {
    				printTime();
    			} else if ("exit".equals(command)) {
    				System.out.println("Good Bye!");
    				break;
    			} else {
    				System.out.println("Unknown command! Please enter 'help'");
    			}
    
    		}		
    		scnr.close();
    	}
    	
    	private static void printTime() {
    		System.out.printf("%1tT\n", new Date());		
    	}
    
    	private static void printDate() {
    		System.out.printf("%1tY-%1$tm-%1$td\n", new Date());		
    	}
    
    	private static void printListCommand() {
    		System.out.println(
    				"'help'\tprint list commands;\n" + 
    				"'exit'\texit from programm;\n" + 
    				"'date'\tprint today's date;\n" + 
    				"'time'\tprint current time;");
    	}
    }
    Ответ написан
    3 комментария
  • Как подключить драйвер MySQL к проекту в IDEA?

    Ewintory
    @Ewintory
    Java / Android developer
    Надо открыть Project Structure, из раздела libraries найти скачанный mysql драйвер и добавить его как библиотеку.
    Ответ написан
    6 комментариев