Spring 安全二级authenticationSuccessHandler
Spring Security two authenticationSuccessHandler
好的,我解决了重定向问题。但现在我有另一个问题。我的网络应用程序有三个项目。一个项目是主页,它会告诉您是否有权进入这些项目。那部分一切都很好。但现在在其他两个项目中我有我的 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>
每次进入主页都需要点击两次。一是因为总是重定向,因为我设置了
name="alwaysUseDefaultTargetUrl" value="true" to true.
那是因为每当我进入项目2的登录页面时,总是将我重定向到项目1。项目一键进入。但是每当我使用项目 1 登录时,我需要单击 link 中的时间按钮或其他任何按钮才能进入项目 2.
现在我的问题是我是否可以拥有两个 "authenticationSuccessHandler"。这会将我重定向到项目 2。然后单击一次或某些逻辑或其他内容。
在阅读和搜索答案之后。我终于找到了一个。所以就这样了。我自己制作了 class 用于身份验证。
<beans:property name="authenticationSuccessHandler">
<beans:bean class="com.ams.dcs.jsf.extras.SuccesHandler">
</beans:bean>
</beans:property>
还有我的class
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());
}
}
我很高兴我做到了。
好的,我解决了重定向问题。但现在我有另一个问题。我的网络应用程序有三个项目。一个项目是主页,它会告诉您是否有权进入这些项目。那部分一切都很好。但现在在其他两个项目中我有我的 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>
每次进入主页都需要点击两次。一是因为总是重定向,因为我设置了
name="alwaysUseDefaultTargetUrl" value="true" to true.
那是因为每当我进入项目2的登录页面时,总是将我重定向到项目1。项目一键进入。但是每当我使用项目 1 登录时,我需要单击 link 中的时间按钮或其他任何按钮才能进入项目 2.
现在我的问题是我是否可以拥有两个 "authenticationSuccessHandler"。这会将我重定向到项目 2。然后单击一次或某些逻辑或其他内容。
在阅读和搜索答案之后。我终于找到了一个。所以就这样了。我自己制作了 class 用于身份验证。
<beans:property name="authenticationSuccessHandler">
<beans:bean class="com.ams.dcs.jsf.extras.SuccesHandler">
</beans:bean>
</beans:property>
还有我的class
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());
}
}
我很高兴我做到了。