获取当前登录的用户ID

时间:2015-07-24 11:19:30

标签: spring-mvc spring-security

我想获取当前登录的用户ID并将其传递给视图。用户使用用户名和密码登录 弹簧security.xml文件

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security.xsd">

    <!-- enable use-expressions -->
    <http auto-config="true" use-expressions="true">
        <intercept-url pattern="/panel/**"
            access="hasAnyRole('ROLE_USER', 'ROLE_ADMIN')" />
        <intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" />

        <!-- access denied page -->
        <access-denied-handler error-page="/403" />

        <form-login login-page="/login" login-processing-url="/j_spring_security_check"
            authentication-failure-url="/login?error" username-parameter="username"
            password-parameter="password" authentication-success-handler-ref="authSuccessHandler" />
        <logout logout-url="/j_spring_security_logout" logout-success-url="/" />

        <!-- enable csrf protection -->
        <csrf />
    </http>

    <beans:bean id="authSuccessHandler" class="com.terafast.tem.AuthSuccessHandler" />

    <authentication-manager>
        <authentication-provider>
            <jdbc-user-service data-source-ref="dataSource"
                users-by-username-query="select username,password,enabled from users where username=?"
                authorities-by-username-query="select u1.username, u2.role from users u1, user_roles u2 where u1.role_id = u2.role_id and u1.username =?" />
        </authentication-provider>
    </authentication-manager>

</beans:beans>

控制器

@RequestMapping(value = "/request/create", method = RequestMethod.GET)
public String displayVacationRequestPage(Model model) {
    Vacation vacation = new Vacation();
    model.addAttribute("vacation", vacation);

    return "panel/createRequest";
}

有人可以解释我该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以添加简单的映射方法

  @RequestMapping("/user")
  public Principal user(Principal user) {
    return user;
  }

如果/user映射可以访问,它将返回当前已验证的用户。请考虑使用@ResponseBody为您的回复添加注释,具体取决于您如何设置控制器以及您计划如何在视图中使用它。

对于传递特定属性,您可以执行类似

的操作
  @RequestMapping(value="/username", method = RequestMethod.GET)
  public String printUser(ModelMap model, Principal user) {
      String name = user.getName(); //get logged in username
      model.addAttribute("username", name);
      return "panel/createRequest";
  }