安全弹簧 - 找到302

时间:2016-07-27 07:06:47

标签: java spring spring-security

所以,我有问题,当我打开localhost / myApp / *时,它总是会重定向到localhost / myApp / login,找到302 Found Error。我是春天的初学者。 这是我的web.xml文件:

   <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" version="2.5"
             xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
            http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

        <display-name>SpringTest</display-name>


        <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>


        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/spring/applicationContext.xml
                /WEB-INF/spring/securityContext.xml
                </param-value>
        </context-param>



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



        <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>ContextConfigLocation</param-name>
                <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
            </init-param>

            <load-on-startup>1</load-on-startup>
        </servlet>

        <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>


        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>

    </web-app>

这是我的securityContext.xml

 <beans:beans xmlns="http://www.springframework.org/schema/security"
                 xmlns:beans="http://www.springframework.org/schema/beans"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 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-4.0.xsd">


        <http auto-config="true">
            <access-denied-handler error-page="/403" />
            <intercept-url pattern="/" access="permitAll" />
            <intercept-url pattern="/resources**" access="permitAll"/>
            <intercept-url pattern="/images**" access="permitAll"/>
            <intercept-url pattern="/**" access="hasRole('ADMIN') or hasRole('USER')"/>
            <intercept-url pattern="/admin_panel/**" access="hasRole('ADMIN')"/>


            <form-login
                    login-page="/login"
                    default-target-url="/"
                    authentication-failure-url="/login?error"
                    username-parameter="ssoId" password-parameter="password"/>

            <logout logout-success-url="/login?logout" />
            <csrf/>
        </http>

        <global-method-security secured-annotations="enabled"/>

        <authentication-manager >
            <authentication-provider>
                <user-service>
                    <user name="bill"  password="abc123"  authorities="ROLE_USER" />
                    <user name="admin" password="root123" authorities="ROLE_ADMIN" />
                    <user name="dba"   password="root123" authorities="ROLE_ADMIN,ROLE_DBA" />
                </user-service>
            </authentication-provider>
        </authentication-manager>

    </beans:beans>

我的控制器:

package com.program.Controllers;

import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Created by mgrzesiuk on 24.07.16.
 */
@Controller
public class SecurityController {

    @RequestMapping(value="/login",method= RequestMethod.GET)
    public String showLoginForm()
    {
        return "login";
    }


    @RequestMapping(value="/logout", method = RequestMethod.GET)
    public String logoutPage (HttpServletRequest request, HttpServletResponse response) {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        if (auth != null){
            new SecurityContextLogoutHandler().logout(request, response, auth);
        }
        return "redirect:/login?logout";
    }

    @RequestMapping(value = "/Access_Denied", method = RequestMethod.GET)
    public String accessDeniedPage(ModelMap model) {
        model.addAttribute("user",getPrincipal());
        return "accessDenied";
    }

    private String getPrincipal(){
        String userName = null;
        Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();

        if (principal instanceof UserDetails) {
            userName = ((UserDetails)principal).getUsername();
        } else {
            userName = principal.toString();
        }
        return userName;
    }


}

0 个答案:

没有答案