Java 检查Freemarker模板中的Spring安全角色和登录用户名

Java 检查Freemarker模板中的Spring安全角色和登录用户名,java,spring,security,freemarker,Java,Spring,Security,Freemarker,是否有人知道freemarker标记用于检查freemarker文件中的spring安全角色和用户名 我从网上的两个参考资料中发现,下面的代码将打印登录的用户名。但它不是打印用户名,而是打印“登录身份” 登录为 同时,检查Freemarker文件中的角色也不起作用。以前有人这样做过吗?以下方法应该有效: 步骤1:在freemarker文件顶部包括Spring安全标签库 步骤2:检查角色名称 <@security.authorize ifAnyGranted="ROLE_USER"&g

是否有人知道freemarker标记用于检查freemarker文件中的spring安全角色和用户名

我从网上的两个参考资料中发现,下面的代码将打印登录的用户名。但它不是打印用户名,而是打印“登录身份”


登录为

同时,检查Freemarker文件中的角色也不起作用。以前有人这样做过吗?

以下方法应该有效:
步骤1:在freemarker文件顶部包括Spring安全标签库

步骤2:检查角色名称

<@security.authorize ifAnyGranted="ROLE_USER">
    Your role is "ROLE_USER" <br/>
</@security.authorize>

您的角色是“角色用户”
步骤3:检查登录用户的登录名

<@security.authorize access="isAuthenticated()">
    logged in as <@security.authentication property="principal.username" /> 
</@security.authorize>

<@security.authorize access="! isAuthenticated()">
    Not logged in
</@security.authorize>

登录为
未登录

希望这有帮助。

我使用的是Maven/Jetty设置,Spring安全标签不会自动放入WEB-INF/lib。因此,需要进行以下调整:

  • 使用以下分配:
    ,具体取决于您的web根目录
  • 非常难看:将security.tld从spring security taglibs jar复制到WEB-INF中。不幸的是,我无法从类路径获取Freemarker来解析标记库

  • 您可以创建一个
    HandlerInterceptor
    ,它可以在上下文中注入用户:

    public class PutUserInModelInterceptor implements HandlerInterceptor {
    
      @Override
      public boolean preHandle(HttpServletRequest aRequest, HttpServletResponse aResponse, Object aHandler) throws Exception {
        return true;
      }
    
      @Override
      public void postHandle(HttpServletRequest aRequest, HttpServletResponse aResponse, Object aHandler, ModelAndView aModelAndView) throws Exception {
        if(aModelAndView != null) {
          Principal user = aRequest.getUserPrincipal();
          aModelAndView.addObject("__user", user);
        }
      }
    
      @Override
      public void afterCompletion(HttpServletRequest aRequest, HttpServletResponse aResponse, Object aHandler, Exception aEx) throws Exception { }
    
    }
    
    然后注册:

    @Configuration
    public class WebMvcConfig extends WebMvcConfigurerAdapter {
    
      @Override
      public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new PutUserInModelInterceptor());
      }
    
    }
    
    然后在模板中使用它。e、 g:

    <#if !(__user??)> 
      <a class="p-2" href="#" data-toggle="modal" data-target="#signinModal">Sign in</a>
    <#else>
      <span class="badge badge-secondary">${__user.getName()}</span>
    </#if>
    
    
    ${\uuuu user.getName()}
    
    <#if !(__user??)> 
      <a class="p-2" href="#" data-toggle="modal" data-target="#signinModal">Sign in</a>
    <#else>
      <span class="badge badge-secondary">${__user.getName()}</span>
    </#if>