Spring saml在详细信息对象中设置UserDetails,而普通表单登录在主体中设置它

时间:2017-05-21 18:18:34

标签: spring jsp spring-security spring-saml

如何根据身份验证类型读取jsp中的主体对象?或者也许检查对象的类型?
问题是Spring SAML在Authentication.principal中设置用户名,在Authentication.details中设置UserDetails对象

那么如何在jsp中的主体和细节之间切换以获取用户数据? 我想出了以下几点:

    <sec:authentication var="user" property="principal"/>
    <c:if test="${user.getClass().simpleName == 'String'}">
        <sec:authentication var="user" property="details"/>
        <label>${user.userCompany}</label>
    </c:if>
<c:if test="${user.getClass().simpleName != 'String'}">
        <sec:authentication var="user" property="principal"/>
        <label>${user.userCompany}</label>
</c:if>

但在这种情况下,我将不得不重复html标签,我不想这样做,因为它会导致很多html的两面性。 或者如何在jsp中读取整个Authentication对象? 有什么建议吗?

1 个答案:

答案 0 :(得分:0)

经过大量的研究,找到了解决方案如下:

<sec:authentication var="userDetail" property="principal"/>
                            <c:choose>
                                <c:when test="${userDetail.getClass().simpleName == 'String'}">
                                    <sec:authentication var="user" property="details"/>
                                </c:when>
                                <c:otherwise>
                                    <sec:authentication var="user" property="principal"/>
                                </c:otherwise>
                            </c:choose>

我认为这样做,直到有人告诉我更好的事情。