我有一个基于 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
稍后在登录操作类中返回角色(用户指定)admin
或user
。
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/