Nim*_*sky 6 java spring spring-mvc spring-security
我已设置spring security以正确拦截并使用自定义登录页面提示用户,然后正确进行身份验证并将用户详细信息添加到SecurityContextHolder.
补充一点,我现在想要在执行登录时添加我自己的自定义User对象添加到会话中; 所以代码看起来像这样:
public returnwhat? doMySupplementaryLogin() {
UserDetails principal = (UserDetails) SecurityContextHolder.getContext()
.getAuthentication().getPrincipal();
MyUser user = myUserService.getMyUser(principal.getUsername());
add user to what ?
}
Run Code Online (Sandbox Code Playgroud)
这段代码会在哪里?我希望执行nomral spring身份验证,然后上面的代码将MyUser对象放入会话,然后将用户发送到原始拦截的url/viewname.我有强烈的感觉,我使事情变得比他们需要的更复杂......
chz*_*gla 10
你确实让它变得复杂...... :)
您想要的是向spring的普通身份验证管理器添加自定义身份验证提供程序.因此,您将配置身份验证管理器,如下所示:
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider user-service-ref="authServiceImpl">
<security:password-encoder ref="passwordEncoder"/>
</security:authentication-provider>
</security:authentication-manager>
<bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.Md5PasswordEncoder"/>
Run Code Online (Sandbox Code Playgroud)
现在,您只需要在spring上下文中定义authServiceImpl bean.您可以通过xml或注释(我的首选方式)执行此操作.
@Service
public class AuthServiceImpl implements AuthService {
Run Code Online (Sandbox Code Playgroud)
您需要实现AuthService接口.只需从界面实现方法 - 应该非常简单.你不需要自己把东西放进SecurityContextHolder-- spring会这样做.
你想要的是这个:
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException {
return MyUser user = myUserService.getMyUser(username);
}
Run Code Online (Sandbox Code Playgroud)
如果您有任何其他问题,请随时询问.
编辑:或者你可以让你的UserService类实现接口 - 我只是这样做,因为你没有提供你的UserService类.
| 归档时间: |
|
| 查看次数: |
13228 次 |
| 最近记录: |