在我的控制器中,当我需要活动(登录)用户时,我正在执行以下操作来获取我的UserDetails实现:
User activeUser = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
log.debug(activeUser.getSomeCustomField());
Run Code Online (Sandbox Code Playgroud)
它工作正常,但我认为Spring可以在这样的情况下让生活更轻松.有没有办法将UserDetails自动装配到控制器或方法?
例如,类似于:
public ModelAndView someRequestHandler(Principal principal) { ... }
Run Code Online (Sandbox Code Playgroud)
但是,而不是得到UsernamePasswordAuthenticationToken,我得到了一个UserDetails?
我正在寻找一个优雅的解决方案.有任何想法吗?
我是Spring的新手:
我不希望经过身份验证的用户访问登录页面.如果用户已经过身份验证,那么处理'/ login'重定向的正确方法是什么?说,如果已经登录,我想重定向到'/ index'.
我在登录时尝试了'isAnonomous()',但它重定向到访问被拒绝的页面.
<security:http auto-config="true" use-expressions="true" ...>
<form-login login-processing-url="/resources/j_spring_security_check"
default-target-url="/index"
login-page="/login" authentication-failure-url="/login?login_error=t" />
<logout logout-url="/resources/j_spring_security_logout" />
...
<security:intercept-url pattern="/login" access="permitAll" />
<security:intercept-url pattern="/**" access="isAuthenticated()" />
</security:http>
Run Code Online (Sandbox Code Playgroud)