球高手,struts(拦截器)实现登录权限验证。
用户登陆,且必须为指定权限的用户才可以查看系统中某个视图资源,否则,提示用户没有权限,并且跳转到系统首页。
0.使用struts2拦截器。
1.一个人员只能拥有一种权限;
2.权限分为管理员、操作员、超级管理员三种;
3.超级管理员可以查看系统下的所用功能模块;管理员可以查看除人员管理外的功能模块;操作员只能打开个人信息管理页面;
这个我现在就做了个登录,后面这里如何拦截就不会了。因为以前也没有涉及过此类题目,高手们给点思路 。
[解决办法]
- HTML code
<interceptors> <interceptor name="loginedCheck" class="com.natures.core.web.interceptor.LoginedCheckInterceptor"/> <interceptor-stack name="iframeStack"> <interceptor-ref name="loginedCheck"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 定义默认的拦截器 每个Action都会自动引用,如果Action中引用了其它的拦截器 默认的拦截器将无效 --> <default-interceptor-ref name="iframeStack"></default-interceptor-ref>
[解决办法]
利用数据库的表啊
用户表中增加一个字段JUR(权限)number类型
管理员1
普通用户2
超级管理员0
登陆时验证用户名密码信息的时候,顺便验证JUR信息。通过此字段来控制跳转
[解决办法]
可以好好利用struts2的优点,实现权限监听
可以这样做
假如权限存储在一个表中,
或者说用户表只有一个
1、写一个监听类
package com.interceptor;
import com.fdr.pojo.User;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import java.util.*;
public class UserLoginInterceptor extends AbstractInterceptor
{
public String tip;
public String getTip() {
return tip;
}
public void setTip(String tip) {
this.tip = tip;
}
public String intercept(ActionInvocation invocation) throws Exception
{
ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
User user =(User)session.get("User");
if (user != null)
{
return invocation.invoke();
}else{
ctx.put("tip" , "请登录!");
setTip("请登录!");
//return Action.LOGIN;
return "userLogin";
}
}
}
第二步,写个struts2的配置文件,也就所谓的xml,
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 定义含“权限检查拦截器”的包,供其他模块引用 -->
<package name="struts-default-with-auth-check" extends="struts-default" >
<interceptors>
<!-- 定义“权限检查拦截器” -->
<interceptor name="userCheck"
class="com.interceptor.UserLoginInterceptor">
</interceptor>
<!-- 定义含“权限检查拦截器”的拦截器栈,注意缺省的拦截器栈“defaultStack”要放在前面 -->
<interceptor-stack name="userStack">
<!-- <interceptor-ref name="defaultStack" /> -->
<interceptor-ref name="userCheck"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 正式应用可能含很多package,为了能从其他package中跳转到登录页面,把登录页面定义成全局result
<default-interceptor-ref name="userStack"></default-interceptor-ref>
-->
<global-results>
<result name="userLogin">login.jsp</result>
<result name="adminLogin">login.jsp</result>
</global-results>
</package>
</struts>
第三补
其他的xml都继承这个xml
然后再xml的action中加入
<interceptor-stack name="userStack"/>
就OK了