1

我正在struts2使用spring security开发一个简单的登录页面。问题是每当我登录时,无论用户是否有效,它总是显示我的自定义访问被拒绝页面。我不明白这个错误,因为除了警告之外没有显示任何错误:

org.apache.struts2.components.ServletUrlRenderer.warn 找不到指定操作的配置:命名空间中的“j_spring_security_check”:“/”。表单动作默认为“动作”属性的文字值。

我的 web.xml

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/applicationContext-security.xml
    </param-value>
</context-param>
<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>
<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>*.action</url-pattern>
</filter-mapping>
<welcome-file-list>
    <welcome-file>/jsp/index.jsp</welcome-file>
</welcome-file-list>  
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

我的 applicationContext-security.xml

 <http auto-config="true">
    <intercept-url pattern="/direct.action" access="permitAll()" />
    <intercept-url pattern="/admin.action" access="hasRole('ROLE_Admin')" />

    <access-denied-handler error-page="/jsp/deniedAccess.jsp" />

    <form-login login-page="/jsp/login.jsp" default-target-url="/admin.action" 
                authentication-failure-url="/validateUser.action?error" 
                username-parameter="username" password-parameter="password" />

    <logout logout-success-url="/logout.action?logout" />       
</http>

<authentication-manager>
    <authentication-provider>
        <user-service>
            <user name="user" password="user" authorities="ROLE_User" />
            <user name="admin" password="admin" authorities="ROLE_USER" />
        </user-service>
    </authentication-provider>
</authentication-manager>

struts.xml

<struts>
<package name="default" extends="struts-default" namespace="/">
    <action name="direct" class="action.LogAction" method="reDirect">
        <result name="success">/jsp/login.jsp</result>
    </action>
    <action name="admin" class="action.LogAction" method="directAdmin">
        <result name="success">/admin/adminHome.jsp</result>
    </action>
    <action name="validateUser" class="action.LogAction" method="errorDirect">
        <result name="success">/jsp/login.jsp</result>
    </action>
    <action name="logout" class="action.LogAction" method="directLogout">
        <result name="success">/jsp/login.jsp</result>
    </action>
</package>

索引.jsp

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Redirecting...</title>
</head>
<body>
    Redirecting...
    <META HTTP-EQUIV="Refresh" CONTENT="0;URL=direct.action">
</body>

我不知道是什么错误。任何帮助将不胜感激

登录.jsp

 <s:form action="j_spring_security_check" namespace="/" method="post">
            <s:textfield name="username" label="Username"/>
            <s:password name="password" label="Password"/>
            <s:submit align="center" value="Login"/> 
        </s:form>
4

1 回答 1

0

您的 login.jsp 表单标记指向 j_spring_security_check,它不是 struts.xml 中的操作名称。将其更改为将处理登录帖子的任何操作名称。

如果您在 action.LogAction 中编写了一个方法(或实现了 execute())来实际处理您的登录,则需要在 struts.xml 中提供成功和失败结果。成功结果应该将用户带到他们应该去的任何地方成功登录后,失败结果将它们带回登录jsp。有关更多信息,请参阅此处的 struts 文档。

于 2015-06-04T17:30:46.720 回答