Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在struts2和x2B中区分不同的用户;冬眠_Struts2_Actioncontext - Fatal编程技术网

在struts2和x2B中区分不同的用户;冬眠

在struts2和x2B中区分不同的用户;冬眠,struts2,actioncontext,Struts2,Actioncontext,struts.xml <package name="admin" extends="struts-default" namespace="/admin"> <interceptors> <interceptor class="interceptor.LoginInterceptor" name="loginInterceptor"/> <interceptor-stack name="log

struts.xml

<package name="admin" extends="struts-default" namespace="/admin">
        <interceptors>
            <interceptor class="interceptor.LoginInterceptor" name="loginInterceptor"/>
            <interceptor-stack name="loginStack">
                <interceptor-ref name="loginInterceptor"/>
                <interceptor-ref name="defaultStack"/>
            </interceptor-stack>                 
        </interceptors>     

        <default-interceptor-ref name="loginStack"/>

        <global-results>  
            <result name="login">/login.jsp</result>                        
        </global-results>

        <action name="index">
           <result>/WEB-INF/admin/index.jsp</result>
        </action>

        actions
        .
        .           

</package>

<package name="secure" extends="struts-default" namespace="/secure">
        <interceptors>
            <interceptor class="interceptor.LoginInterceptor" name="loginInterceptor"/>
            <interceptor-stack name="loginStack">
                <interceptor-ref name="loginInterceptor"/>
                <interceptor-ref name="defaultStack"/>
            </interceptor-stack>                 
        </interceptors>     

        <default-interceptor-ref name="loginStack"/>

        <global-results>  
            <result name="login">/login.jsp</result>                        
        </global-results>

        <action name="index">
           <result>/WEB-INF/admin/index.jsp</result>
        </action>

        <action class="actions.LoginAction" name="authenticateUser">
             <!-- generate dynamically for success-->
             <result name="input">/login.jsp</result>
             <result name="error">/login.jsp</result>
       </action>

</package>
对不起,我弄错了,我问错了

在我的应用程序Admin和Customer中有两种用户。 我想区分它们,并根据角色动态重定向到特定命名空间操作

目前只有管理员的身份验证功能

我想出了这个解决办法

但我不知道如何将请求url映射到特定名称规范的操作,无论是客户的“安全”还是基于角色的管理员的“管理员”。 否则显示全局异常

admin的所有JSP都位于admin文件夹中,而客户的JSP则位于WEF-INF文件夹的customer文件夹中

我还指定了一些注释,我仍然需要填写,但不知道如何填写。 对于cheking角色,我知道,但对于重定向,我不知道该做什么

我还没有实现这一点。但我有这个想法。 即使是我认为可能的或不可能的。
如果有更好的解决方案,那么您可以告诉我。

您在URL映射方面面临的问题是什么,当然我们可以使用spring security来简化此问题,但这是针对spring爱好者的:)。如果将身份验证(登录)和授权(访问资源)分开,您的问题将非常简单。创建一个可公开访问的包(包括登录)、一个用于管理操作的包和一个用于用户操作的包,这些包将包含授权拦截器。这听起来像是一个简单的案例,所以像这样一个简单的解决方案就足够了。《Struts2在行动》一书演示了如何创建这样一个拦截器。您的问题不清楚,请更具体地说明您想要实现什么。你试过什么例子?你好,我更新了我的帖子。请查看并提供任何解决方案。@Rohit在找到解决方案方面做得很好。奇怪的是,我真的很喜欢封闭式结构2问题如果你有时间记录你自己的解决方案,我会投票表决。仅供参考,但也有一些推荐Spring security,对于这个非常简单的案例来说,这太过分了。。。但是,如果你需要更重的认证,那么Spring Security备受吹捧,但要考虑Apache Shiro是否有必要出现。
public String intercept(ActionInvocation invocation) throws Exception {        
        final ActionContext context = invocation.getInvocationContext();
        HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST);
        HttpSession session = request.getSession(true);

        Object user = session.getAttribute("user");
        if (user == null) {
            String loginAttempt = request.getParameter("loginAttempt");
            if(!StringUtils.isEmpty(loginAttempt)){
                return invocation.invoke();            
            }                            
            return "login";
        } else {            
            // Check for user role here
            // and redirect to action of specific namespace
            return invocation.invoke();
        } 
    }