2017-02-14 18 views
0

Я относительно новичок в работе весеннего сапога. У меня было базовое веб-приложение, встроенное в «Угловое» с подключенным Spring Boot и к Mongodb. Приложение разрешило пользователям добавлять списки дел и регистрироваться для веб-сайта. Когда приложение запустило его, вернули todolists, хранящиеся в mongodb, в представление. Пользователь мог зарегистрироваться, и детали были сохранены в репозитории Mongo.Исключительное исключение кругового обзора с пружинным каркасом и AngularJs

Когда я добавил и реализован весной безопасности, я получил сообщение об ошибке

Circular view path [login]: would dispatch back to the current handler URL [/login] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.) 

То, что я хочу, чтобы случиться, когда WebAPP нагрузки, я хочу index.html, который будет введен с todo.html. Затем, если пользователь входит в систему, они будут перенаправлены на другую страницу или какую-либо функцию Ui, чтобы стать доступной. На данный момент я застрял в этом Круговой путь просмотра цикл.

Я просмотрел различные ответы, но я до сих пор смущен относительно того, что именно вызывает проблему. Я считаю, что это в классе WebSecurityConfig

@Configuration 
@EnableWebMvcSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{ 

    @Autowired 
    UserDetailsService userDS; 

    @Override 
    protected void configure(HttpSecurity http) throws Exception{ 

    http 
     .authorizeRequests() 
     .antMatchers("/api/todos/*").permitAll() 
     .anyRequest().authenticated() 
     .and() 
     .formLogin() 
     .loginPage("/login") 
     .permitAll() 
     .and() 
     .logout() 
     .permitAll(); 
    } 

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

    auth 
     .userDetailsService(userDS); 

    } 

    @Override 
    protected UserDetailsService userDetailsService() { 
     return userDS; 
    } 
} 

AuthUserDetailsService

@Repository 
public class AuthUserDetailsService implements UserDetailsService { 
    @Autowired 
    private UserRepository users; 
    private org.springframework.security.core.userdetails.User userdetails; 

    @Override 
    public UserDetails loadUserByUsername(String username) 
     throws UsernameNotFoundException { 
    // TODO Auto-generated method stub 

    boolean enabled = true; 
    boolean accountNonExpired = true; 
    boolean credentialsNonExpired = true; 
    boolean accountNonLocked = true; 

    todoapp.models.User user = getUserDetail(username); 

    userdetails = new User (user.getUsername(), 
       user.getPassword(), 
       enabled, 
       accountNonExpired, 
       credentialsNonExpired, 
       accountNonLocked, 
       getAuthorities(user.getRole()) 
       ); 

    return userdetails; 
    } 
    public List<GrantedAuthority> getAuthorities(Integer role) { 

    List<GrantedAuthority> authList = new ArrayList<GrantedAuthority>(); 
    if (role.intValue() == 1) { 
     authList.add(new SimpleGrantedAuthority("ROLE_ADMIN")); 
    } else if (role.intValue() == 2) { 
     authList.add(new SimpleGrantedAuthority("ROLE_USER")); 
    } 

    return authList; 
    } 

    private todoapp.models.User getUserDetail(String username){ 

     todoapp.models.User user = users.findByUsername(username); 


    return user; 
    } 
} 

TodoController

@RestController 
@RequestMapping("/api/todos") 
public class TodoController { 

    @Autowired 
    TodoRepository todoRepository; 

    @RequestMapping(method=RequestMethod.GET) 
    public List<Todo> getAllTodos() { 
     return todoRepository.findAll(); 
    } 

    @RequestMapping(method=RequestMethod.POST) 
    public Todo createTodo(@Valid @RequestBody Todo todo) { 
     return todoRepository.save(todo); 
    } 

    @RequestMapping(value="{id}", method=RequestMethod.GET) 
    public ResponseEntity<Todo> getTodoById(@PathVariable("id") String id) { 
     Todo todo = todoRepository.findOne(id); 
     if(todo == null) { 
      return new ResponseEntity<Todo>(HttpStatus.NOT_FOUND); 
     } else { 
      return new ResponseEntity<Todo>(todo, HttpStatus.OK); 
     } 
    } 

    @RequestMapping(value="{id}", method=RequestMethod.PUT) 
    public ResponseEntity<Todo> updateTodo(@Valid @RequestBody Todo todo, @PathVariable("id") String id) { 
     Todo todoData = todoRepository.findOne(id); 
     if(todoData == null) { 
      return new ResponseEntity<Todo>(HttpStatus.NOT_FOUND); 
     } 
     todoData.setTitle(todo.getTitle()); 
     todoData.setCompleted(todo.getCompleted()); 
     Todo updatedTodo = todoRepository.save(todoData); 
     return new ResponseEntity<Todo>(updatedTodo, HttpStatus.OK); 
    } 

    @RequestMapping(value="{id}", method=RequestMethod.DELETE) 
    public void deleteTodo(@PathVariable("id") String id) { 
     todoRepository.delete(id); 
    } 

} 

RecourceController

@Configuration 
public class ResourceController extends WebMvcConfigurerAdapter{ 
    @Override 
     public void addViewControllers(ViewControllerRegistry registry) { 
      registry.addViewController("/").setViewName("index"); 
      registry.addViewController("/api/todos").setViewName("home"); 
      registry.addViewController("/register").setViewName("register"); 
      registry.addViewController("/login").setViewName("login"); 
     } 
} 

Любая помощь будет принята с благодарностью.

Это макет проекта. enter image description here

ответ

1

Вы забыли добавить .html ваших имен зрения:

registry.addViewController("/").setViewName("app/views/index.html"); 
registry.addViewController("/api/todos").setViewName("app/views/home.html"); 
registry.addViewController("/register").setViewName("app/views/register.html"); 
registry.addViewController("/login").setViewName("app/views/login.html"); 

Spring Загрузочный регистрирует ResourceHttpRequestHandler, который способен решать статические ресурсы под static папку. Потому что вы установили login в качестве имени для просмотра ResourceHttpRequestHandler пытается загрузить static/login, которого, судя по всему, не существует. Измените его на app/views/login.html так, чтобы static/login стал static/app/views/login.html.

+0

Я изменил registry.addViewController на следующее. registry.addViewController ("/") setViewName ("статический/вид/index.html"). –

+0

Я также добавил структуру проекта к вопросу. –

+0

Отлично. Обновлен мой ответ –

 Смежные вопросы

  • Нет связанных вопросов^_^