当前位置: 首页 > 知识库问答 >
问题:

不能为登录REST服务调用spring security的authenticate方法

严俊友
2023-03-14

我想在authenticationProvider中检查用户名和密码,但不知道为什么不能调用authenticate方法。我正在通过spring Security实现REST登录服务。我的web.xml是

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>WEB-INF/applicationContext.xml
        WEB-INF/spring-security.xml</param-value>
</context-param>
<!-- Spring Security Filter  -->
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>
   org.springframework.web.filter.DelegatingFilterProxy
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

<servlet>
    <servlet-name>jersey-serlvet</servlet-name>
    <servlet-class>
        com.sun.jersey.spi.spring.container.servlet.SpringServlet
    </servlet-class>
    <init-param>
        <param-name>
            com.sun.jersey.config.property.packages
        </param-name>
        <param-value>com.zymr.ojo.action</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>jersey-serlvet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

<welcome-file-list>
    <welcome-file>jsp/login.jsp</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.jsp</welcome-file>
</welcome-file-list>

spring-security.xml如下所示...

<context:component-scan base-package="com.zymr.ojo" />
<security:global-method-security pre-post-annotations="enabled" secured-     annotations="enabled" />

<!-- Security configuration for REST services. -->
<security:http use-expressions="true" entry-point-ref="restEntryPoint" create-  session="always">
    <!-- <security:http-basic/> -->
    <security:intercept-url pattern="/rest/question/**"  access="isAuthenticated()"/>
   <!--  <security:intercept-url pattern="/rest/login/userLogin" access="permitAll"/> -->
   <security:form-login login-processing-url="/rest/login/userLogin" username-parameter="admin" password-parameter="password"/>
</security:http>

<!-- Authentication manager. -->
<security:authentication-manager >
    <security:authentication-provider user-service-ref="authProvider" >
        </security:authentication-provider>
</security:authentication-manager>

<!-- Entry point for REST service. -->
<bean id="restEntryPoint" class="com.zymr.ojo.security.RestAuthenticationEntryPoint" />

<!-- A handler for successful REST service authentication. -->
<bean id="authSuccessHandler" class="com.zymr.ojo.security.RestAuthenticationSuccessHandler"></bean>
<bean id="authProvider" class="com.zymr.ojo.security.RestAuthenticationProvider" ></bean>

而RESTAuthenticationProvider类是

@组件公共类RestAuthenticationProvider实现AuthenticationProvider,
UserDetailsService{

public Authentication authenticate(Authentication authentication)
        throws AuthenticationException {
    System.out.println("in authProvider");
    String username = authentication.getName();
    String password = (String) authentication.getCredentials();
    if(username != null && password != null){
        System.out.println(username+ "  "+ password);
    }
    return null;
}

public boolean supports(Class<?> authentication) {
    // TODO Auto-generated method stub
    return false;
}

public UserDetails loadUserByUsername(String username)
        throws UsernameNotFoundException {
    System.out.println(username);
    return null;
}

共有1个答案

易焱
2023-03-14

问题在于supports(..)方法总是返回false。入口点应该为用户提供填充Authentication实例的方法,如果supports方法返回true,则该方法将被赋予Authenticate方法。

 类似资料:
  • 我有一个SpringMVC web应用程序,它需要通过发送用户名和密码,使用Spring Security对RESTful web服务进行身份验证。当记录用户时,需要将cookie设置为用户的浏览器,并且在随后的调用中使用cookie与另一个RESTful web服务验证用户会话。 我四处寻找,但一直未能找到如何完成这一点的好例子,所有的尝试都是徒劳的。 这两个服务每次都返回用户的权限,并且spr

  • 如果我把它放入邮递员中,它就会正确地获取json响应。 现在,当我从我的android代码中调用相同的代码时,我得到的响应是“unauthorized”。 我的改装服务 我的RestApiManager类(该类用于调用服务接口并创建翻新构建器) 对RestApiManager的调用

  • 此功能的状态是实验性的。我们欢迎您对此功能的实用性的反馈。我们可能会在未来发展这个功能,使其更加通用。虽然我们将努力确保向后兼容性,但不能保证。 场景 在某些情况下,希望能够从交易处理函数中调用REST API。这使你可以将区块链中的复杂计算移出。调用REST API允许交易处理器功能将复杂或昂贵的计算外包给中央或peer托管的服务。 调用外部REST服务 post(url,data)函数可用于交

  • 本文向大家介绍SpringBoot 配合 SpringSecurity 实现自动登录功能的代码,包括了SpringBoot 配合 SpringSecurity 实现自动登录功能的代码的使用技巧和注意事项,需要的朋友参考一下 自动登录是我们在软件开发时一个非常常见的功能,例如我们登录 QQ 邮箱: 很多网站我们在登录的时候都会看到类似的选项,毕竟总让用户输入用户名密码是一件很麻烦的事。 自动登录功能

  • 使用以下命令登录 ftp服务器: lftp ftp://用户名[:密码]@服务器地址[:端口] #标准方式,推荐 lftp 用户名[:密码]@服务器地址[:端口] lftp 服务器地址 [-p 端口] -u 用户名[,密码] lftp 服务器地址[:端口] -u 用户名[,密码] 如果不指定端口,默认 21 如果不在命令中使用明文输入密码,连接时会询问密码(推荐) 可以使用“书签”收藏服务器

  • 大佬们好,我现在是直接调用第三方服务网站的cookie登录,需要每天更新一次非常繁琐。 但是抖店的cookie更新一次可以用很多天,怎么实现使用抖店的cookie跳转登录到第三方呢? 浏览器上点击是从抖店的服务跳转到第三方,我尝试了一直不成功 这种应该怎么实现登录的?万分感谢!