我有一个web应用程序,其中一个特定的url'/ newPost'应该只能被一个用户admin访问。当试图导航到'/ newPost'时,应该将用户重定向到登录页面,在那里他必须以管理员身份验证他的身份。
这一切都有效,除了当用户填写登录表单时,表单会每次发送到“/ login”。我目前不知道它为什么发布到'/ login'而不是我重定向到使用百里香叶子的路径:th:action="@{/newPost}"
Spring Security for single user
TLDR;提交登录表单后,我不断被重定向到/登录。我正在使用春季靴子,春季安全和百里香。
控制器:
/*Keeps getting called*/
@RequestMapping(value="/login", method=RequestMethod.GET)
public String login(Model model)
{
model.addAttribute("lc", new LoginCredentials());
System.out.println("Login controller");
return "login";
}
/*RequestMapping I want to be called*/
@RequestMapping(value="/newPost", method = RequestMethod.GET)
public String isLoggedIn(@ModelAttribute LoginCredentials lc, Model model)
{
if(lc.isAdmin())
{
System.out.println("lc is admin");
model.addAttribute("bp",new BlogPost());
return "newPost";
} else
{
System.out.println("lc is not admin");
return "login";
}
}
登录表单:
<form class="form-signin" th:action="@{/newPost}" th:object="${lc}" method = "post">
<h2 class="form-signin-heading">Please sign in</h2>
<label for="inputEmail" class="sr-only">Username</label>
<input type="text" id="username" class="form-control" th:field="*{inputUsername}" placeholder="Username" required="required" autofocus="autofocus" />
<label for="inputPassword" class="sr-only">Password</label>
<input type="password" id="password" th:field="*{inputPsswd}" class="form-control" placeholder="Password" required ="required" />
<button class="btn btn-lg btn-primary btn-block" type="submit" style="background-color:#F6358A;">Sign in</button>
</form>
安全配置:
httpSecurity
.authorizeRequests()
.antMatchers("/","/videos","/BlogPost","/index","/aboutUs").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll();
您的表单是post方法,它具有对newPost的操作url。你可以添加更多有关该方法的细节?另外,您发布的表单是登录表单,因此您在哪里配置Spring Security来处理登录信息? –
因为你没有使用Spring Security,但正在解决它... –
@ M.Deinum感谢您的评论。它促使我阅读更多Spring Security文档,学习它,然后真正解决问题。 – Turtle