首页 > 解决方案 > 使用 Spring 的登录页面

问题描述

我正在 Spring 中设置我的安全支持,并且正在探索它所提供的功能。在设置我的登录 URL 和视图时,我需要为主页和登录 URL 注册简单的控制器。具体来说,代码是:

@Override
    public void addViewControllers(ViewControllerRegistry registry){
        registry.addViewController("/").setViewName("home");
        registry.addViewController("/login");
    }

在行registry.addViewController("/").setViewName("home");中,该行似乎只是为 URL“/”添加了控制器,并且为 GET 到该 URL 只是使用视图“home”进行渲染。
我做对了吗?主要问题是关于 line registry.addViewController("/login");。在这里,我为“/login” URL 添加控制器。
但是应用程序如何知道使用哪个视图呢?当我尝试该应用程序时,它确实使用了我创建的“登录”视图。

标签: springspring-security

解决方案


好吧,你在正确的轨道上,但并不完全。如果您没有登录并打开 URL“yourdomain.tld/”,您将被重定向到 URL“yourdomain.tld/home”,该 URL 通常可能是一个登录页面。(第一行)。当然,您需要一个控制器来处理这个请求并返回一个正确的 JSP/JSF 页面。

不需要您的第二行。诀窍在于,通过这样的配置,您可以将 URL“yourdoamin.tld/”与登录用户的不同页面一起使用。

为了回答您的主要问题,您需要为每个 URL 或要使用的 URL 的一部分设置一个控制器。在这个控制器中,您可以根据请求的 URL 选择视图。

例子:

@Controller
@RequestMapping(value="/info")
@Scope(value="session")
public class InfoController extends AbstractWebController {

    @RequestMapping
    public ModelAndView infoPage() {
        ModelAndView mav = this.getModelAndView("info/infopage");
        return mav;
    }
}

该控制器负责所有以“yourdomain.tld/info”开头的 URL。正如你所看到的,我只有 URL“yourdomain.tld/info”来返回正确的视图。在此示例中,我返回“infopage.jsp”。您可以添加代码以返回其他页面的不同视图。


推荐阅读