相关疑难解决方法(0)

使用Spring Security时,获取bean中当前用户名(即SecurityContext)信息的正确方法是什么?

我有一个使用Spring Security的Spring MVC Web应用程序.我想知道当前登录用户的用户名.我正在使用下面给出的代码段.这是接受的方式吗?

我不喜欢在这个控制器中调用静态方法 - 这违背了Spring的全部目的,恕我直言.有没有办法配置应用程序以注入当前的SecurityContext或当前的身份验证?

  @RequestMapping(method = RequestMethod.GET)
  public ModelAndView showResults(final HttpServletRequest request...) {
    final String currentUser = SecurityContextHolder.getContext().getAuthentication().getName();
    ...
  }
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc spring-security

280
推荐指数
9
解决办法
17万
查看次数

ThreadLocal变量的性能

ThreadLocal变量读取多少比常规字段慢?

更具体地说,简单的对象创建比访问ThreadLocal变量更快还是更慢?

我认为它足够快,因此ThreadLocal<MessageDigest>实例比MessageDigest每次创建实例要快得多.但这也适用于字节[10]或字节[1000]吗?

编辑:问题是在调用ThreadLocalget 时真正发生的事情?如果那只是一个领域,就像任何其他领域一样,那么答案就是"它总是最快",对吧?

java performance multithreading thread-local

83
推荐指数
4
解决办法
3万
查看次数

Spring Security:自定义用户详细信息

我是Java和Spring 3的新手(过去8年主要使用PHP).我已经获得了spring security 3来使用所有默认的userDetails和userDetailsS​​ervice,我知道我可以使用以下命令访问控制器中登录用户的用户名:

Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String username = auth.getName(); //get logged in username
Run Code Online (Sandbox Code Playgroud)

但有两个问题我无法弄清楚:

  1. 当用户登录时,我希望存储许多其他用户详细信息(例如DOB,性别等),并且稍后可以通过控制器访问.我需要做什么才能创建的userDetails对象包含我的自定义字段?

  2. 我已经调用了"HttpSession session = request.getSession(true);" 在我的控制器中的每个方法的顶部.是否可以在登录时将登录用户的userDetails存储在会话中,这样我就不需要再调用"Authentication auth = SecurityContextHolder.getContext().getAuthentication();" 在每个方法的开头?

安全applicationContext.xml中:

<global-method-security secured-annotations="enabled"></global-method-security>     
<http auto-config='true' access-denied-page="/access-denied.html">
    <!-- NO RESTRICTIONS -->        
    <intercept-url pattern="/login.html" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <intercept-url pattern="/*.html" access="IS_AUTHENTICATED_ANONYMOUSLY"  /> 
    <!-- RESTRICTED PAGES -->
    <intercept-url pattern="/admin/*.html" access="ROLE_ADMIN" />
    <intercept-url pattern="/member/*.html" access="ROLE_ADMIN, ROLE_STAFF" />

    <form-login login-page="/login.html"
                login-processing-url="/loginProcess"
                authentication-failure-url="/login.html?login_error=1"
                default-target-url="/member/home.html" />
    <logout logout-success-url="/login.html"/>
</http>

<authentication-manager>
    <authentication-provider>
        <jdbc-user-service data-source-ref="dataSource" authorities-by-username-query="SELECT U.username, UR.authority, U.userid FROM users U, userroles UR …
Run Code Online (Sandbox Code Playgroud)

spring spring-security

9
推荐指数
1
解决办法
2万
查看次数