gpt4 book ai didi

java - struts2检查权限拦截器

转载 作者:行者123 更新时间:2023-12-01 15:16:26 26 4
gpt4 key购买 nike

在我当前的 struts2 + spring Web 应用程序中,我的自定义 userSessionInterceptor 运行良好。我现在也想开始强制执行用户角色。我在网上做了很多研究,似乎有很多方法可以做到这一点,例如异常,sendRedirect

最正确的方法是什么?我已经将用户角色保存在用户 session 中,并且可以毫无问题地检测和发现错误。我唯一需要决定的是当权限不正确时如何应对。

在拦截器中,我知道我可以返回“xxx”并执行“xxx”操作。然而,我想要实现的是,当用户尝试执行他们没有权限的操作时,将会显示一条消息。我假设我可以返回到上一页并向 URL 添加参数。

对此有什么建议吗?

谢谢

最佳答案

这是一个示例程序。

RoleInterceptor.java

package com.sample.common.interceptor;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
import com.opensymphony.xwork2.util.ValueStack;

public class RoleInterceptor implements Interceptor {

private static final long serialVersionUID = 5031826078189685536L;

@Override
public void init() {

}

@Override
public void destroy() {

}

@Override
public String intercept(ActionInvocation actionInvocation) {

String result = null;
try {
ActionContext actionContext = actionInvocation
.getInvocationContext();

ValueStack vStack = actionContext.getValueStack();
HttpSession httpSession = ServletActionContext.getRequest()
.getSession();

StringBuilder actionUrl = new StringBuilder(actionInvocation
.getProxy().getNamespace());
actionUrl.append("/");
actionUrl.append(actionInvocation.getProxy().getActionName());

if (httpSession != null) {

boolean hasPermission = true; // if the role has the permission

if (hasPermission) {

result = actionInvocation.invoke();

} else {

vStack.set("userMsg",
"You are not authorized to access this link");
result = "user.unauthorized";
}
} else {

vStack.set("userMsg", "Please login to your account");
result = "user.login";
}

} catch (Exception e) {
e.printStackTrace();
}

return result;

}

}

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="userRoleInterceptor">
<interceptors>
<interceptor name="userRole"
class="com.sample.common.interceptor.RoleInterceptor" />
</interceptors>
</package>
<package name="user" namespace="/user" extends="struts-default, json-default, userRoleInterceptor">
<action name="user_details" method="getUserDetails"
class="com.sample.user.web.action.User">
<interceptor-ref name="userRole"/>
<interceptor-ref name="store">
<param name="operationMode">RETRIEVE</param>
</interceptor-ref>
<result name="success">userDetails.jsp</result>
<result name="input">/common/error.jsp</result>
<result name="busy" type="redirectAction" >/common/busy.jsp</result>
<result name="error" type="redirectAction" >/common/test.jsp</result>
<result name="user.login" type="redirectAction" >/common/login.jsp</result>
<result name="user.unauthorized" type="redirectAction" >/common/unauthorizedUser.jsp</result>
</action>
</package>
</struts>

关于java - struts2检查权限拦截器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11531474/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com