Я относительно новичок в работе весеннего сапога. У меня было базовое веб-приложение, встроенное в «Угловое» с подключенным 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");
}
}
Любая помощь будет принята с благодарностью.
Я изменил registry.addViewController на следующее. registry.addViewController ("/") setViewName ("статический/вид/index.html"). –
Я также добавил структуру проекта к вопросу. –
Отлично. Обновлен мой ответ –