俊俊的良 2023-05-20 17:41 采纳率: 50%
浏览 28

ssm中ajax登录怎么跳转到web-inf下?

SSM中Ajax用window.location.href访问web-inf报404

描述:SSM中使用Ajax登录,成功后用window.location.href跳转web-inf失败,配置了资源放行还是404

img

img

Ajax

$.ajax({
                    type: "POST",
                    url: "/user/login",
                    data: {uname: username, password: password},
                    dataType: "text",
                    success: function (data) {
                        if (data==="true") {
                            window.location.href="http://localhost:8080/jsp/index.jsp";
                        } else {
                            alert("用户名或密码错误!")
                        }
                    }, error: function () {
                        alert("出错啦。。。")
                    }
                });

web.xml

 <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

springmvc-servlet.xml

<!--静态资源交给tomcat处理 不再被dispatcher拦截-->
    <mvc:default-servlet-handler/>
    <!--配置静态资源放行-->
    <mvc:resources mapping="/jsp/**" location="/WEB-INF/jsp/"/>
    <!--开启注解驱动 配置 处理器映射器和处理器适配器-->
    <mvc:annotation-driven/>
    <!--开启扫描controller组件-->
    <context:component-scan base-package="com.zhiyou.controller"/>
    <!--配置视图解析器 添加前后缀-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

  • 写回答

1条回答 默认 最新

  • 小泽的熊先森 2023-05-20 17:55
    关注

    这是因为WEB-INF目录是受保护的,无法直接通过URL访问其中的内容。
    WEB-INF目录下的内容通常包含Web应用程序的配置文件、Java类文件和其他敏感信息,它们不应该被直接暴露给用户访问。应该通过控制器(Controller)将需要呈现给用户的内容发送到浏览器。
    如果你想要使用Ajax登录后跳转到受保护的页面,你可以在服务器端Controller处理Ajax请求,然后在服务器端进行页面跳转。

    为了解决这个问题,您可以考虑以下两种方法:
    将要访问的资源移出WEB-INF目录:将需要访问的资源(例如JSP页面或其他静态文件)移动到WEB-INF目录外的合适位置,然后使用window.location.href进行重定向。这样就可以通过URL直接访问该资源了。
    使用服务器端跳转:在Ajax登录成功后,不要使用window.location.href进行重定向,而是返回一个重定向的URL(或者其他相关的数据),然后在Ajax的回调函数中使用JavaScript执行页面跳转。在服务器端,您可以使用Spring MVC提供的RedirectView或者ModelAndView来实现服务器端跳转。这样可以避免直接访问WEB-INF目录,同时保持用户在浏览器上的访问路径不变。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月20日