自动登录 acegi 安全

Posted

技术标签:

【中文标题】自动登录 acegi 安全【英文标题】:auto login acegi security 【发布时间】:2012-08-06 15:04:09 【问题描述】:

有没有办法在使用 acegi 安全模块的 servlet 应用程序中避免基于表单的登录?我想以某种方式将登录名和密码传递给 URL。我试着这样称呼:

GrantedAuthority[] grantedAuthorities = new GrantedAuthority[] new GrantedAuthorityImpl("ROLE_ADMIN");
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken("admin", "passwordofadmin", grantedAuthorities);
WebAuthenticationDetails authdetails = (WebAuthenticationDetails) authentication.getDetails();
HttpSession session = event.getSession();
ProviderManager pm = (ProviderManager)WebApplicationContextUtils.getWebApplicationContext(session.getServletContext()).getBean("authenticationManager");
pm.doAuthentication(authentication);
SecurityContextHolder.getContext().setAuthentication(authentication);

HttpSessionCreatedEvent 事件的处理程序中,我收到了AuthenticationSuccessEvent 事件,但随后也收到了Failure 事件并显示了身份验证表单。

【问题讨论】:

【参考方案1】:

首先您必须在 xml 中覆盖 UserDetailsS​​ervice。像这样的:

<bean id="userService" class="com.security.UserSecurityService" >
    ...
</bean>

然后编写自己的service.like:

public class UserSecurityService implements UserDetailsService 
public UserDetails loadUserByUsername(String username)
        throws UsernameNotFoundException, DataAccessException

User user =userDAO.findByUsername(username);
GrantedAuthority[] grantedRoles = new GrantedAuthorityImpl("ROLE_USER");

        secUsr = new User(user.getUsername(), user.getPassword(), true, grantedRoles);

希望对你有帮助

【讨论】:

以上是关于自动登录 acegi 安全的主要内容,如果未能解决你的问题,请参考以下文章

acegi安全登录,无需手动输入密码

Grails + Acegi:如何处理密码更新?登录用户与未登录用户

访问当前登录用户对象的 ACEGI 标记

登录页面使用 SSL,未加密页面看不到加密会话 cookie (Grails, Acegi)

Grails Acegi 手动登录

如何设计相对安全的cookie自动登录系统