java - spring 设置 2 个调度程序 servlet 和安全性

标签 java jakarta-ee spring-mvc spring-security

我想在 Spring 中创建一个 CMS,但在设置 2 个调度程序 servlet 时遇到问题。 (我也是 Spring 的新手)

我想要这样的结构:

app/...(我的网站及其所有页面)

app/cms/...(我的 cms 是网站的一部分,我可以在其中管理我的内容)

因此,我定义了 2 个调度程序 servlet:

<servlet>
    <description></description>
    <display-name>app</display-name>
    <servlet-name>app</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>app</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<servlet>
    <description></description>
    <display-name>cms</display-name>
    <servlet-name>cms</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>cms</servlet-name>
    <url-pattern>/cms/*</url-pattern>
</servlet-mapping>

还有 2 个 xml 文件 cms-servlet.xmlapp-servlet.xml 都具有正确的包位置和 jsp 解析器,具有正确的 jsp 文件位置

现在我正在尝试设置安全性和登录表单。我的security-context.xml:

<security:http use-expressions="true">
    <security:intercept-url pattern="/cms/login" access="permitAll" />
    <security:intercept-url pattern="/resources/**" access="permitAll" />
    <security:intercept-url pattern="/" access="permitAll" />
    <security:intercept-url pattern="/cms/**" access="isAuthenticated()" />
    <security:intercept-url pattern="/**" access="denyAll" />
    <security:form-login login-page="/cms/login" />
</security:http>

问题是我收到错误:

Mai 18, 2014 10:35:32 PM org.springframework.web.servlet.PageNotFound noHandlerFound
WARNING: No mapping found for HTTP request with URI [/app/cms/login] in DispatcherServlet with name 'cms'

我的自定义login.jsp(当然带有Spring处理它的正确标签)位于cms jsp文件下。登录 Controller 位于我在 cms-servlet.xml 中定义的包中。如果我改变这2个:

<security:intercept-url pattern="/login" access="permitAll" />
<security:form-login login-page="/login" />

我的浏览器出现错误,提示此网页有重定向循环

问题是什么?我如何设置 2 个调度程序 servlet 正确吗?

PS:我的登录 Controller 来自 cms 包:

@RequestMapping("/login")
public String showLogin() {
    return "login";
}

最佳答案

由于警告:

No mapping found for HTTP request with URI [/app/cms/login] 
in DispatcherServlet with name 'cms'

您的 Controller 是否映射/cms?像这样的东西:

@Controller
@RequestMapping("/cms")
public class CmsController {

    @RequestMapping("/login")
    public String showLogin() {
        return "login";
    }

关于java - spring 设置 2 个调度程序 servlet 和安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23726666/

相关文章:

java - 为什么 Eclipse 使用 Cp1252 编码?

java - Spring -slf4J : how to automatically log errors and exceptions?

java - Java Web 项目上的多窗口

java - BigDecimal 中的 Spring MVC Controller NumberFormat 注释模式问题

java - 聊天应用程序: Get messages between 2 users in Parse query

apache - 如何在apache2服务器上部署j2ee应用

java - 如何从外部容器访问 JBoss 4.x 上的远程 EJB 2.1 bean

spring - MVC Spring : Can we get the XML response if I passed json parameters in body for post request?

java - Spring Security配置访问

java - 创建带有自动增量列: '' is not a valid name的表