我尝试制作自定义登录表单,如果他有ROLE_USER,则将用户重定向到学生页面。
控制器: public class LoginController { @Autowired private UserService userService;
@RequestMapping("/student")
public String mypage(Model model, Principal principal) {
model.addAttribute("TADADAGHDGHA");
return "student/student";
}
// @RequestMapping(value = "/logout", method = RequestMethod.GET)
// public String logoutPage() {
// return "/logoutPage";
// }
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String loginPage() {
return "login/loginPage";
}
}
弹簧security.xml文件
<http auto-config="true" use-expressions="true" disable-url-rewriting="true">
<intercept-url pattern="/login/*" access="ROLE_USER" />
<form-login login-processing-url="/login" login-page="/login/loginPage"
username-parameter="email" password-parameter="password"
default-target-url="/student" authentication-failure-url="/loginPage?auth=fail" />
<logout logout-success-url="/logoutPage" />
</http>
在VIEWS文件夹中,我有一个页面注销,一个名为LOGIN的文件夹,其中包含login.jsp和tiles-definitions.xml,另一个文件夹名为STUDENT,其中包含student.jsp文件。
答案 0 :(得分:1)
不要限制查看登录页面的权限。否则,人们将不断被重定向到他们无法访问的页面......这是您的重定向循环的来源。
此外,您的authentication-failure-url
设置可能存在问题。根据给定的配置,它似乎不是一个有效的链接。
答案 1 :(得分:0)
根据spring文档,您可以通过以下方式检查用户是否在spring-security.xml中具有角色:
<intercept-url pattern="/login/*" method="GET" access="hasRole('ROLE_USER')" /> OR
<intercept-url pattern="/login/*" method="POST" access="hasRole('ROLE_USER')" />
如果用户具有该角色,则只有他才能查看该页面。
您还可以通过这种方式限制服务层的方法访问权限;
@PreAuthorize("hasRole('ROLE_USER')")
public void methodName() {
// Only users with ROLE_USER can access this content.
}
如果您想了解更多信息,可以使用权限参考Spring文档,Spring in Action或任何Spring书。