权限验证
系统首页
1,编写首页cn.itcast.home.HomeAction
类的内容就一个跳转到首页的方法:
1 public class HomeAction extends ActionSupport {
2
3 //系统首页
4 public String execute(){
5 return "home";
6 }
7 }
配置home-struts.xml文件
1 <struts> 2 <package name="home" namespace="/sys" extends="struts-default"> 3 <action name="home_*" class="cn.itcast.home.action.HomeAction" method="{1}"> 4 <result name="home">/WEB-INF/jsp/home/home.jsp</result> 5 <result name="{1}">/WEB-INF/jsp/home/{1}.jsp</result> 6 </action> 7 </package> 8 </struts>
将home-struts.xml加入到struts.xml中
将home.jsp 加入到项目的WEB-INF/jsp/home目录下,修改进入纳税服务首页的链接。
纳税服务首页
新增纳税服务的首页对应的cn.itcast.nsfw.home.action.HomeAction,里面就只包含3个方法,分别定向frame.jsp、top.jsp、left.jsp的方法:
配置home-struts.xml 并包含到struts.xml中。
之后引入welcome.jsp、bg.jsp到common目录下,frame.jsp、top.jsp、left.jsp三个jsp文件到WEB-INF/jsp/nsfw目录下并修改这3个页面中的链接和相关信息。
登录与注销
1.1.1 登录与注销
1.1.1.1 编写LoginAction
在这个action中;主要处理登录和注销操作;方法应该包括:
1、 跳转到登录页;toLoginUI()——loginUI
2、 当没有权限时,跳转到没有权限的提示页面;toNoPermissionUI()——noPermissionUI
3、 登录方法;验证登录。需要具体的userService,userDao方法。
userDaoImpl类中具体的实现方法为:
4、 注销登录;logout()——tologinUI
LoginAction类:
配置login-struts.xml文件并引入struts.xml中。
项目首页重定向到登录页
改写WebRoot下面的index.jsp,在里面直接重定向到登录页。
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
2 <%
3 String path = request.getContextPath();
4 response.sendRedirect(path+"/sys/login_toLoginUI.action");
5 %>
权限验证说明
在系统中,① 需要验证用户的登录,只有登录后才能访问系统的资源。② 纳税服务子系统只有角色拥有“纳税服务”权限的才可以操作。
对于上述2种的权限验证,在此采用过滤器进行处理。编写LoginFilter过滤器,在过滤器中对用户访问的url进行登录验证,在登录的前提下再次验证如果访问的是纳税服务命名空间下的资源则利用权限验证接口PermissionCheck校验用户是否有“纳税服务”。
登录过滤器
编写过滤器cn.itcast.core.filter.LoginFilter 类;实现javax.servlet.Filter接口:
在web.xml中配置该过滤器:
1 <filter> 2 <filter-name>loginFilter</filter-name> 3 <filter-class>cn.itcast.core.filter.LoginFilter</filter-class> 4 </filter> 5 <filter-mapping> 6 <filter-name>loginFilter</filter-name> 7 <url-pattern>*.action</url-pattern> 8 </filter-mapping>
鉴定权限
在过滤器中加入权限的鉴定;当用户登录的情况下如果访问特定模块需要验证用户是否有特定权限。由于权限常用于在用户使用系统时权限的鉴定,所以可以在用户实体中加入一个用户权限的集合来保存用户的角色集合。新增用户类中角色列表属性userRoles用于存放用户的角色列表。
PermissionCheck/PermissionCheckImpl
在applicationContext.xml中需要注册PermissionCheck Bean,主要是为了方便在使用鉴定权限时可以注入其它Service。
解决细节-登录页面嵌套
在纳税服务的首页中使用了frameset,当前用户的系统登录信息失效后;如果再点击左边的菜单,那么在右边的显示登录页面,而正确的应该是整个页面返回到登录页。
解决这个问题:应该在跳转到登录页面中使用js脚本判断,是否当前页面在框架内,即当前页面的窗口是否是顶级窗口,如果是子窗口的话;可以直接刷新父窗口的地址则会自动地整个页面跳转为登录页。
1 <script type="text/javascript"> 2 if(window != window.parent){ 3 window.parent.location.reload(true); 4 } 5 </script>