Struts2—拦截器实现权限控制

在Struts2中,有内置的拦截器,在struts-core的struts-default.xml中,有一些框架自身默认配置的拦截器。

在拦截器中,有一个拦截器栈,在拦截器栈中拦截器的顺序非常的重要。action会按照里面的顺序去通过拦截器。

、只要在定义包的过程中继承struts-default包,defaultstack就是默认的拦截器栈

、当为一个显式的拦截器定义一个拦截器时,则不再调用他的默认拦截器

、拦截器栈中的顺序很重要,需要符合逻辑性

在这里我们模拟一个用户权限的登入拦截器,需要登入的用户才可以登入,不然无法登入页面。

login.jsp

<body>
    <h2>用户登入</h2>
    ${loginerro}
    <form action="login" method="post">
    用户名:<input type="text" name="user" />
    密码:<input type="password" name="password"/>
   <input type="submit" value="登入"/>
    </form>
    
  </body>

manager.jsp
<body>
    此页面只有登入用户的人可以查看,其他不可以。
    
  </body>
需要一个处理登入请求的类

login.jsp

public class Login extends ActionSupport implements SessionAware{
	private String user;
	private String password;
	private Map<String, Object> session;
	public String getUser() {
		return user;
	}
	public void setUser(String user) {
		this.user = user;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public void setSession(Map<String, Object> session) {
	this.session=session;
		
	}
	//处理登入请求
	public String login(){
		if("admin".equals(user)&&"123".equals(password)){
			session.put("logininfo", user);
			return SUCCESS;
		}else{
			session.put("loginerro", "用户名不正确");
			return ERROR;
		}
	}

}
使用session来保存是否登入的信息

一个继承abstractinterceptor的类

LoginInterceptor.jsp

public class LoginInterceptor extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		ActionContext context=ActionContext.getContext();
                            
//得到session中的是否登入信息

Map<String, Object> session=context.getSession();if(session.get("logininfo")!=null){String result=invocation.invoke();return result;}else{return "login";}}}


创建完毕以后我们在xml文件中进行配置拦截器和action
<!--注册拦截器  -->
    <interceptors>
      <interceptor name="auth" class="com.imooc.interceptor.LoginInterceptor"></interceptor>
     <!-- 自定义拦截器组合 --> 
      <interceptor-stack name="mystack">
      <interceptor-ref name="defaultStack"></interceptor-ref>
      <interceptor-ref name="auth"></interceptor-ref>
      </interceptor-stack>
    </interceptors><!--通过此action来访问后台页面,需要判断用户是否登入,如果没有登入就跳转到登入页面  -->
    <action name="auth">
    <result>/WEB-INF/page/manager.jsp</result>
    <result name="login">/WEB-INF/page/login.jsp</result>
    <!--引用拦截器栈  -->
    <interceptor-ref name="mystack"></interceptor-ref>
    </action>
    <action name="login" class="com.imooc.action.Login" method="login">
    <result>/WEB-INF/page/manager.jsp</result>
    <result name="error">/WEB-INF/page/login.jsp</result>
    </action> 



运行结果如下:



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值