2013-02-19 131 views
3

我不知道我在哪里丢失了一些东西,真的很感激您对此的帮助! 我登录后得到“身份验证方法不支持:GET”消息。Spring Security:不支持身份验证方法:GET

这里是我的安全context.xml中:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:security="http://www.springframework.org/schema/security" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
       http://www.springframework.org/schema/security 
       http://www.springframework.org/schema/security/spring-security-3.1.xsd"> 

    <!-- <security:http auto-config="true" access-decision-manager-ref="accessDecisionManager"> --> 
    <security:http auto-config="true"> 
     <security:intercept-url pattern="/login/login.do" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <security:intercept-url pattern="/login/doLogin.do" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <security:intercept-url pattern="/lib/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <security:intercept-url pattern="/css/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <security:intercept-url pattern="/images/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <security:intercept-url pattern="/resources/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_REMEMBERED" /> 
     <security:form-login login-page="/login/login.do" authentication-failure-url="/login/login.do?login_error=true" default-target-url="/test/showTest.do"/> 
     <security:logout logout-success-url="/login/login.do" invalidate-session="true" /> 
     <security:remember-me key="rememberMe"/> 
    </security:http>  


    <security:authentication-manager> 
     <security:authentication-provider> 
      <security:jdbc-user-service data-source-ref="dataSource" 
      users-by-username-query="select EMAIL as email, PASSWORD as password, from ams.user where EMAIL=?" 
      authorities-by-username-query=" 
       select distinct user.EMAIL as email, permission.NAME as authority 
       from ams.user, ams.user_role, ams.role, ams.role_permission, ams.permission 
       where user.ID=user_role.USER_ID AND user_role.ROLE_ID=role_permission.ROLE_ID AND role_permission.PERMISSION_ID=permission.ID AND user.EMAIL=?"/> 
      <security:password-encoder ref="passwordEncoder" /> 
     </security:authentication-provider> 
    </security:authentication-manager> 

    <bean id="passwordEncoder" 
     class="org.springframework.security.authentication.encoding.ShaPasswordEncoder"> 
     <constructor-arg value="256" /> 
    </bean> 
</beans> 

而且我的LoginController:

@Controller 
public class LoginController { 

    @RequestMapping(method = RequestMethod.GET) 
    public ModelAndView showLogin() { 
     ModelAndView mav = new ModelAndView("login/login"); 

     return mav; 
    } 

    @RequestMapping(method = RequestMethod.POST) 
    public ModelAndView doLogin(@RequestParam("email") String email, 
      @RequestParam("password") String password, 
      @RequestParam("remember_me") boolean rememberMe, 
      HttpServletRequest request, HttpServletResponse response) { 

     ModelAndView mav = new ModelAndView(); 

     mav.setViewName("redirect:/j_spring_security_check?j_email=" + email + "&j_password=" + password + "&_spring_security_remember_me=" + rememberMe); 

     return mav; 
    } 
} 

如果你需要什么更多的,请告诉我

回答

3

我猜你尝试发送使用用户名和密码作为查询参数的登录URL的HTTP GET请求。因为这本质上是不安全的(例如可以加书签),所以不允许。您应该发送一个HTTP POST。

+0

但doLogin方法是Post,所以它不应该工作呢? – 2013-02-19 20:05:35

+0

哦,你在这里混合了一些东西。你的'doLogin()'方法**处理一个POST请求并发送一个重定向作为响应。然后,客户端(浏览器)向重定向消息中指定的URL发送GET请求(这是一个手工制作的登录url)。 – zagyi 2013-02-19 20:11:32

+0

嗯,那么好吧,我该怎样或者更确切地说我应该在哪里告诉安全 - 上下文,它应该是一个帖子 – 2013-02-19 20:14:00

相关问题