【问题标题】:Spring Security: Authentication method not supported: GETSpring Security:不支持身份验证方法:GET
【发布时间】:2013-02-04 15:43:04
【问题描述】:

我不知道我在哪里遗漏了一些东西,非常感谢你在那个方面的帮助! 我尝试登录后收到“不支持身份验证方法:GET”消息。

这是我的 security-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>

还有我的登录控制器:

@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;
    }
}

如果您需要更多信息,请告诉我

【问题讨论】:

    标签: spring spring-security security-context


    【解决方案1】:

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

    【讨论】:

    • 哦,你把事情搞混了。您的doLogin() 方法正在处理 POST 请求并发送重定向作为响应。然后客户端(浏览器)向重定向消息中指定的 URL(这是一个手工制作的登录 url)发送一个 GET 请求。
    • 嗯,好吧,我应该如何或者更确切地说在哪里告诉安全上下文它应该是一个帖子
    • 不要为登录写控制器方法。创建一个 jsp 或一个简单的 html 作为您的登录页面,其中包含带有必填字段(电子邮件/密码)的 form,并将其发布到登录 URL。喜欢:&lt;form action="/j_spring_security_check" method="post"&gt;
    • 这里随便看一个教程:krams915.blogspot.de/2011/01/… LDAP相关的东西不用管,直接下载代码就行了(链接在文末)。它应该可以帮助您入门。
    猜你喜欢
    • 2014-11-07
    • 2020-11-09
    • 2012-05-30
    • 2021-02-05
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 2022-01-15
    相关资源
    最近更新 更多