java - Java/Struts 中基于角色的操作授权

标签 java struts2 authorization struts roles

我有一个基于 Java/Struts/Hibernate 的应用程序。它有两种类型的用户。管理员和普通用户。我为角色和操作创建了单独的 Struts 页面。

但是当我以普通用户身份登录后在 URL 中输入管理操作时,普通用户可以访问管理页面。我该如何解决这个问题?

我已输入管理员和用户的操作类,它们分别位于 xml 页面中,并包含在 struts.xml 页面中。如果您使用的应用程序一切正常。但请考虑 struts-admin 中的一个操作,例如:adminHome,它将是 localhost:8080/app/adminHome。如果普通用户登录,则 URL 将为 localhost:8080/app/normalHome。但如果普通用户类型将 normalHome 更改为 adminHome,他就可以访问管理页面。

更新:

正如我之前所说,我在 struts.xml 的不同包中拥有管理员和用户操作。我可以用Java获取它的包名称吗?然后我与 user_role 进行比较并直接进入管理 /normal 页面..

最佳答案

查看此代码

在登录操作类中,在用户输入正确的详细信息后写入

session.setAttribute("user_id","userid");//store user id in session scope
session.setAttribute("user_designation","userdesignation");//store designation in session scope

稍后在登录操作类中返回角色(用户指定)adminuser

return "userdesignation";//admin or user

在 struts.xml 中将conf写入登录操作,例如

<action input="/index.jsp" name="Login_Check" path="/login" scope="request" type="com.mycompany.Login_Action" validate="true">
<forward name="admin" path="adminhome.jsp"/>//if action returns `admin`
<forward name="user" path="userhome.jsp""/>//if action returns `user`
</action>

在各自的 JSP 中检查指定,例如

if (session.getAttribute("user_designation").equals("admin"))//for admin JSPs (ex: adminhome.jsp)
{
     ..............//JSP content
}
else
response.sendRedirect("some page");

if (session.getAttribute("userd_esignation").equals("user"))//for user JSPs(ex: userhome.jsp)
{
     ..............//JSP content
}
else
response.sendRedirect("some page");

如果true则仅显示相应的JSP。否则请!将他/她重定向到登录或索引并显示消息。

关于java - Java/Struts 中基于角色的操作授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31400823/

相关文章:

java - 删除功能无法正常工作选择所有复选框

java - 如何在警报对话框中将标题和正/负按钮设为黑色

java - 在 Struts2 View 中显示列表

java - struts 2 if标签用于比较字符类型

asp.net - 根据角色要求某些用户使用更强的密码

java - 为什么 jdb 无法识别 "Integer"类?

java - 如果我的构造函数接受原始类型,如何使用 getDeclaredConstructor?

java - 更新到 struts2.3.15.1 打破了 jsp 中的点符号

cordova - OAuth 隐式流安全与 PhoneGap

ruby-on-rails - 在 CanCan 中通过多项操作进行授权