如何在Spring中添加要在apache tile中显示的属性?

时间:2014-07-21 20:05:51

标签: spring jsp spring-security tiles

我在 singinsignup.jsp 文件中有以下部分,该文件是网站右侧的永久侧边栏。我可以使用principle.username获取用户名。但我希望获得用户电子邮件等信息。我是通过使用model.addAttribute在控制器中进行的,但是如何为tile发送值。因此,问题是我如何在侧栏栏中使用user.email经过身份验证的用户,如果用户通过身份验证,该栏块具有相同的视图?感谢。

singinsingup.jsp文件:

<sec:authorize access="isAuthenticated()">
        <img src="http://s3.amazonaws.com/serhat/${principal.}.jpg" align="middle" />

        <span><sec:authentication property="user.mail" /></span>

        <span><sec:authentication property="principal.username" /></span>
        <br />
        <s:url value="/static/j_spring_security_logout" var="logout_url" />
        <a href="${logout_url}">Logout</a>
        <sec:authorize url="/admin">
            <s:url value="/admin" var="admin_url" />
            <br />
            <a href="${admin_url}">Admin</a>
        </sec:authorize>

views.xml,涉及瓷砖定义:

<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
"http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
<tiles-definitions>
    <definition name="template" template="/WEB-INF/views/main_template.jsp">
         <put-attribute name="top"
            value="/WEB-INF/views/tiles/spittleForm.jsp" />
        <put-attribute name="side"
            value="/WEB-INF/views/tiles/signinsignup.jsp"  />
    </definition>

    <definition name="home" extends="template">
        <put-attribute name="content" value="/WEB-INF/views/home.jsp" />
    </definition>

    <definition name="login" extends="template">
        <put-attribute name="content" value="/WEB-INF/views/login.jsp" />
        <put-attribute name="side"
            value="/WEB-INF/views/tiles/alreadyamember.jsp" />
    </definition>

    <definition name="admin" extends="template">
        <put-attribute name="content" value="/WEB-INF/views/admin.jsp" />
    </definition>
</tiles-definitions>

更新

我添加了 spt 变量:

value="/WEB-INF/views/tiles/signinsignup.jsp" expression="${spt}"  />

为此,我在HomeController中创建了一个变量,我添加了以下几行。但现在我只能按预期在主页上获取电子邮件地址。我想做它并在任何地方的瓷砖中使用它,这样我就不需要在所有控制器中添加这个部分。

    Object principal = SecurityContextHolder.getContext()
            .getAuthentication().getPrincipal();
    if (principal == null)
        return "home";
    if (principal instanceof String)
        return "home";
    if (principal instanceof User) {
        String username = ((User) principal).getUsername();
        Spitter myspitter = spitterService.getSpitter(username);
        model.put("spt", myspitter);
    }

0 个答案:

没有答案