Spring Security两个authenticationSuccessHandler

时间:2015-05-22 16:14:37

标签: java spring spring-security

好的,我解决了重定向问题。但现在我有另一个问题。我的Web应用程序有三个项目。一个项目是主页,并告诉您是否有权进入项目。在那一部分一切都很好。但现在在其他两个项目中我有springsecurity.xml。并拥有自己的日志页面。但现在客户告诉我,想要那些登录页面并将我的第一个项目重定向到主页。问题出在这里。

<beans:bean id="casAuthenticationFilter" class="org.springframework.security.cas.web.CasAuthenticationFilter" >
<beans:property name="authenticationManager" ref="authenticationManager" />
<!-- Propiedad añadida para el redireccionamiento a AMS1.1 -->       
<beans:property name="authenticationSuccessHandler">
    <beans:bean class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler">
        <beans:property name="defaultTargetUrl" value="http://192.168.1.32:8080/AMS1.1/"/>
      <beans:property name="alwaysUseDefaultTargetUrl" value="true"/>
    </beans:bean>
</beans:property>

每当我进入主页时,我需要两次点击两次。一个是因为我总是重定向因为我设置了

  

名=&#34; alwaysUseDefaultTargetUrl&#34;值=&#34;真&#34;为真。

那是因为每当我进入项目2的登录页面时,总是将我重定向到项目1.只需点击一下即可进入项目。但每当我使用项目1进行登录时,我需要点击链接中的时间,按钮或其他任何内容进入项目2.

现在我的问题是我是否可以拥有两个&#34; authenticationSuccessHandler&#34;。这会将我重定向到项目2.然后单击一次或某些逻辑或其他内容。

1 个答案:

答案 0 :(得分:1)

在阅读并寻找答案之后。我终于找到了一个。所以这就是它。我创建了自己的认证课程。

 <beans:property name="authenticationSuccessHandler">
    <beans:bean class="com.ams.dcs.jsf.extras.SuccesHandler">
    </beans:bean>
</beans:property>

我的班级

public class SuccesHandler implements AuthenticationSuccessHandler {
@Override
public void onAuthenticationSuccess(HttpServletRequest hsr, HttpServletResponse hsr1, Authentication a) throws IOException, ServletException {
    Set<String> roles = AuthorityUtils.authorityListToSet(a.getAuthorities());
    int cont=0;

    String url = hsr.getRequestURL().toString();
    // String para ver si ya estamos adentro de la aplicacion o no
    String ams="http://192.168.1.32:8080/AMS1.1/";
    String referrer = hsr.getHeader("referer");
            //Vemos si tenemos el rol de USER y DCS 
     if(roles.contains("SETT_USER") && roles.contains("DCS_USER") )
    {
    // para el debugeo
    // System.out.print("holaaaaaaaaaaaaaaaaaaaaA:"+url);
    // System.out.print("holaaaaaaaaaasdfasdfaaaaaaaaaaaA:"+referrer);
     //Si estamos ya logueados   
     if(ams.equals(referrer))
     {
          hsr1.sendRedirect("/DCS?faces-redirect=true");// Si ya estamos logueados que nos redireccione a DCS
     }
     else
              hsr1.sendRedirect("/AMS1.1"); // Sino Que nos redireccione al homepage y de ahy al logging
    }
    else  if(roles.contains("DCS_USER") && roles.contains("SETT_USER"))
    {
         hsr1.sendRedirect("/DCS?faces-redirect=true");
    }

    System.out.print("MIS ROLEEEES"+roles.toString());
}

}

我很高兴我成功了。