如何从Spring中的users-by-username-query获取结果集

时间:2014-10-27 11:21:27

标签: spring spring-mvc spring-security

我使用Spring登录系统使用以下2个查询:

1)

 users-by-username-query="select email,password,abilitato from
 utente_autenticazione where email=?"

2)

 authorities-by-username-query="select u1.email, u2.ruolo from 
 utente_autenticazione u1, utente_autorizzazione u2 where
 u1.id_utente = u2.id_utente and u1.email =?

有没有办法处理课堂内的结果?我想在用户登录后能够知道电子邮件,密码等。

1 个答案:

答案 0 :(得分:0)

您可以为此创建自定义过滤器,如下所示:

1)Spring-security.xml

 <authentication-manager alias="authenticationManager">
      <authentication-provider user-service-ref="customUserDetailsService" >
            <password-encoder hash="bcrypt"/>
        </authentication-provider>
    </authentication-manager>
<beans:bean id="loginUrlAuthenticationEntryPoint" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
        <beans:property name="loginFormUrl" value="/login"/>
    </beans:bean>
    <beans:bean id="successHandler" class="com.demo.service.impl.LoginSuccessHandler" >
        <beans:property name="defaultSuccessUrl" value="user"/>
    </beans:bean>
    <beans:bean id="failureHandler" class="com.demo.service.impl.LoginFailureHandler">
        <beans:property name="defaultFailureUrl" value="failure"/>
    </beans:bean>

<http auto-config="false" entry-point-ref="loginUrlAuthenticationEntryPoint">

      <custom-filter position="FORM_LOGIN_FILTER" ref="authenticationFilter" />
        <access-denied-handler error-page="/denied"/>
        <logout invalidate-session="true" 
            logout-success-url="/logout/success" 
            logout-url="/logout"/>
      <logout logout-success-url="/login?error"/>
    </http>

<beans:bean id="authenticationFilter" class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
        <beans:property name="authenticationManager" ref="authenticationManager"/>
        <beans:property name="filterProcessesUrl" value="/j_spring_security_check"/>
        <beans:property name="authenticationFailureHandler" ref="failureHandler"/>
        <beans:property name="authenticationSuccessHandler" ref="successHandler"/>
    </beans:bean>

成功登录后,您可以从LoginSuccessHandler访问用户名,密码。

2)LoginSuccessHandler

public class LoginSuccessHandler implements AuthenticationSuccessHandler{
    private String defaultSuccessUrl;
    @Override
    public void onAuthenticationSuccess(HttpServletRequest request,
            HttpServletResponse response, Authentication auth) throws IOException,
            ServletException {
        String username = auth.getName();
        System.out.println("username>>"+username);
        response.sendRedirect(defaultSuccessUrl);
    }
}

同样,您也可以调用LoginFailureHandler来做一些工作,比如阻止用户登录的残疾人数量。

希望得到这个帮助。