前言
到目前位置,我们的用户模块和角色模块基本已经做好了,我们的纳税服务系统是放在一个大系统里边的。我们应该把我们已经写好的模块加载进去。
本文主要的知识点:
- 配置系统首页
- 登陆模块
- 权限拦截模块
加载整个系统首页
导入对应的JSP页面:
这里写图片描述
创建home模块的包,对应的Action和struts配置文件
这里写图片描述
效果图:
这里写图片描述
把纳税服务系统加到总系统上
当我点击纳税服务的时候,会出现纳税服务子系统的页面
网络异常,图片无法展示
|
绑定相关的超链接,跳转到对应的Action中
<li><a href="${ctx }/nsfw/home_frame.action">纳税服务</a> </li>
导入对应的JSP页面:
这里写图片描述
创建对应的模块包和配置文件:
这里写图片描述
public class HomeAction { public String frame() { return "frame"; } public String left() { return "left"; } public String top() { return "top"; } }
配置文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="nsfw-home" namespace="/nsfw" extends="struts-default"> <action name="nsfw_*" class="zhongfucheng.nsfw.HomeAction" method="{1}"> <result name="{1}">/WEB-INF/jsp/nsfw/{1}.jsp</result> </action> </package> </struts>
- 效果:
这里写图片描述
子功能添加到纳税服务系统中
就是让左边的导航栏跳转到我们的对应显示页面就行了。
<dl class=""> <dt><a class="yh" href="${basePath}role/role_listUI.action" target="mainFrame"><b></b>角色管理<s class="down"></s> </a></dt> </dl> <dl class=""> <dt><a class="yh" href="${basePath}user/user_listUI.action" target="mainFrame"><b></b>用户管理<s class="down"></s> </a></dt> </dl>
到目前为止,我们已经写了用户模块和角色模块了。也已经把系统的首页和子系统的首页配置好了。我们的系统是需要登陆后才能访问的。
这里写图片描述
因此,接下来主要讲解登陆模块、权限拦截
登陆模块
编写Action与配置文件
引入对应的JSP页面
这里写图片描述
编写Action处理请求和对应的配置文件:
这里写图片描述
效果:
这里写图片描述
Action处理
在常量类中保存着一个Session的标识:
/***********保存Session域的常量***********/ public static String USER = "SYS_USER";
Action
package zhongfucheng.login; import com.opensymphony.xwork2.ActionContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import zhongfucheng.core.action.BaseAction; import zhongfucheng.core.constant.Constant; import zhongfucheng.user.entity.User; import zhongfucheng.user.service.UserService; import java.util.List; /** * Created by ozc on 2017/6/2. */ public class LoginAction extends BaseAction { /***************封装数据**********************/ private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } /****************调用userService****************************/ @Autowired private UserService userServiceImpl; public String loginUI() { return "loginUI"; } /****************记载着登陆状态信息*********************/ private String loginResult; public String getLoginResult() { return loginResult; } public void setLoginResult(String loginResult) { this.loginResult = loginResult; } /*****************业务方法******************/ public String login() { if (user != null) { List<User> list = userServiceImpl.findUserByAccountAndPassword(user.getAccount(), user.getPassword()); //如果查到有值,那么就证明有该用户的,给他登陆 if (list != null && list.size() > 0) { //保存到Session域中,为了更方便用,我们使用常量保存。 ActionContext.getContext().getSession().put(Constant.USER, list.get(0)); //保存到日志文件中Log Log log = LogFactory.getLog(getClass()); log.info("用户名称为" + list.get(0).getName() + "登陆了系统!"); //重定向到首页 return "home"; } else { //登陆失败,记载登陆信息 loginResult = "登陆失败了,用户名或密码错误了"; } } //只要不成功的,都回到登陆页面 return loginUI(); } }
在dao层中实现根据账户和密码查询数据:
@Override public List<User> findUserByAccountAndPassword(String account, String password) { //通过账户和密码查找对象 String sql = "FROM User WHERE account=? AND password=?"; return getSession().createQuery(sql).setParameter(0, account).setParameter(1,password).list(); }
我们还在Action中定义了一个String来记载着Login的状态,如果出错了。我们就返回loginUI界面,然后在那里回显Login出错的信息。
同时登录完在系统主页上回显数据:
<a><b></b><font color="red">欢迎您,<s:property value="%{#session.SYS_USER.account}"/> </font></a>
网络异常,图片无法展示
|
这里写图片描述
注销功能
在主页上的退出上绑定超链接
<td align="left" valign="middle" ><a href="${ctx}/sys/login_logout.action">退出</a></td>
Action处理:
public String logout() { //销毁session的值 ActionContext.getContext().getSession().remove(Constant.USER); return loginUI(); }