该网页在我的Chrome浏览器中有一个重定向循环

时间:2014-07-11 15:08:59

标签: java spring jsp controller

我尝试制作自定义登录表单,如果他有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文件。

2 个答案:

答案 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书。