SSH系列:(19)系统首页、子系统首页、登录页、项目主页

在这里,有三个名词需要区分:项目首页、系统首页、子系统首页、登录页

项目首页是指在web.xml文件中配置的页面。

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

当一个系统比较大时,可能包含多个子系统。系统有自己的主页,称为系统首页;而子系统也有自己的主页,称为子系统首页

登录页,则是用户进行登录的页面。

1、系统首页

(1)HomeAction.java

package com.rk.home.action;

import com.opensymphony.xwork2.ActionSupport;

public class HomeAction extends ActionSupport {

	//跳转到首页
	@Override
	public String execute() throws Exception {
		return "home";
	}

}

(2)struts-home.xml ,注意:这里并没有将系统首页注入到Spring的IOC容器。因为在后面的子系统首页,也叫做HomeAction,如果注册两个HomeAction会发生报错。

<?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="home_package" namespace="/sys" extends="base-default">
		<action name="home_*" class="com.rk.home.action.HomeAction" method="{1}">
			<result name="home">/WEB-INF/jsp/home/home.jsp</result>
			<result name="{1}">/WEB-INF/jsp/home/{1}.jsp</result>
		</action>
	</package>
</struts>

注意:需要将struts-home.xml加入到struts.xml文件中。

(3)JSP页面:省略

2、子系统首页

(1)HomeAction.java 注意:虽然系统首页和子系统首页都叫HomeAction,但它们在不同的package下。

package com.rk.tax.action;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionSupport;

@Controller("homeAction")
@Scope("prototype")
public class HomeAction extends ActionSupport {
	//跳转到纳税访问系统首页
	public String frame(){
		return "frame";
	}
	//跳转到纳税访问系统首页-顶部
	public String top(){
		return "top";
	}
	//跳转到纳税访问系统首页-左边菜单
	public String left(){
		return "left";
	}
}

(2)struts-home.xml ,这个文件与之前的文件不在同一个文件夹下。

<?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="tax_home_package" namespace="/tax" extends="base-default">
        <action name="home_*" class="homeAction" method="{1}">
            <result name="{1}">/WEB-INF/jsp/tax/{1}.jsp</result>
        </action>
    </package>
</struts>

注意:最后要将struts-home包含到struts.xml文件中

(3)JSP页面:省略

3、登录页

(1)LoginAction.java

package com.rk.home.action;

import java.util.List;

import javax.annotation.Resource;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.ServletActionContext;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionSupport;
import com.rk.core.constant.ProjectStatics;
import com.rk.tax.entity.User;
import com.rk.tax.service.UserService;

@Controller("loginAction")
@Scope("prototype")
public class LoginAction extends ActionSupport {
	/*****1、业务数据 *****/
	private User user;
	private String loginResult;

	/*****2、业务实现类 *****/
	@Resource
	private UserService userService;

	/*****3、响应JSP页面的操作 *****/
	//登录
	public String login(){
		if(user != null){
			if(StringUtils.isNotBlank(user.getAccount()) && StringUtils.isNotBlank(user.getPassword())){
				//根据用户的帐号和密码查询用户列表
				List<User> list = userService.findUserByAccountAndPassword(user.getAccount(),user.getPassword());
				if(list != null && list.size()>0){//说明登录成功
					//2.1、登录成功
					User user = list.get(0);
					//2.1.1、根据用户id查询该用户的所有角色
					user.setUserRoles(userService.findUserRolesByUserId(user.getId()));
					//2.1.2、将用户信息保存到session中
					ServletActionContext.getRequest().getSession().setAttribute(ProjectStatics.USER, user);
					//2.1.3、将用户登录记录到日志文件
					Log log = LogFactory.getLog(getClass());
					log.info("用户名称为:" + user.getName() + " 的用户登录了系统。");
					//2.1.4、重定向跳转到首页
					return "home";
				}
				else{
					loginResult = "帐号或密码不正确!";
				}
			}
			else{
				loginResult = "帐号或密码不能为空!";
			}
		}
		else{
			loginResult = "请输入帐号和密码!";
		}
		return toLoginUI();
	}

	//退出,注销
	public String logout(){
		//清除session中保存的用户信息
		ServletActionContext.getRequest().getSession().removeAttribute(ProjectStatics.USER);
		return "toLoginUI";
	}

	//跳转到登录页面
	public String toLoginUI(){
		return "loginUI";
	}

	//跳转到没有权限提示页面
	public String toNoPermissionUI(){
		return "noPermissionUI";
	}

	// {{
	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public String getLoginResult() {
		return loginResult;
	}

	public void setLoginResult(String loginResult) {
		this.loginResult = loginResult;
	}
	// }}
}

(2)struts-home.xml

<?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="home_package" namespace="/sys" extends="base-default">
		<action name="home_*" class="com.rk.home.action.HomeAction" method="{1}">
			<result name="home">/WEB-INF/jsp/home/home.jsp</result>
			<result name="{1}">/WEB-INF/jsp/home/{1}.jsp</result>
		</action>
		<action name="login_*" class="loginAction" method="{1}">
			<result name="{1}">/WEB-INF/jsp/{1}.jsp</result>
			<result name="loginUI">/WEB-INF/jsp/loginUI.jsp</result>
			<result name="noPermissionUI">/WEB-INF/jsp/noPermissionUI.jsp</result>
			<result name="home" type="redirectAction">
				<param name="actionName">home</param>
			</result>
			<result name="toLoginUI" type="redirectAction">
				<param name="actionName">toLoginUI</param>
			</result>
		</action>
	</package>
</struts>

这里的struts-home.xml要结合LoginAction代码一起看,有两点需要注意的:

第一点注意,在login()方法中,最后返回toLoginUI()方法,它的目的是为了实现信息的回显

return toLoginUI();

第二点注意,在logout()方法中,返回"toLoginUI",是进行了重定向,使用浏览器的地址发生了改变。

(3)UserService.java 添加方法

	List<User> findUserByAccountAndPassword(String account, String password);

(4)UserServiceImple.java 添加方法

	public List<User> findUserByAccountAndPassword(String account,String password) {
		return userDao.findUserByAccountAndPassword(account,password);
	}

(5)UserDao.java添加方法

	List<User> findUserByAccountAndPassword(String account, String password);

(6)UserDaoImpl.java添加方法

	public List<User> findUserByAccountAndPassword(String account,String password) {
		Query query = getSession().createQuery("from User where account=? and password=? and state=?");
		query.setParameter(0, account);
		query.setParameter(1, password);
		query.setParameter(2, User.USER_STATE_VALID);//有效用户才能登录系统
		return query.list();
	}

(7)LoginUI.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@include file="/common/header.jsp" %>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录</title>
<link href="${basePath}/css/login.css" type="text/css" rel="stylesheet">
<script type="text/javascript">

function logins(){
	document.forms[0].submit();
}

function setClean(){
	document.getElementById("account").value = "";
	document.getElementById("password").value = "";
}
//解决子框架嵌套的问题
if(window != window.parent){
	window.parent.location.reload(true);
}
</script>
<style type="text/css">
html { overflow-y: hidden;  }

.password{
      background-color:#f1f3f6;
	  border:1px solid #f1f3f6;
	  font-color:#ccc;
}

#Layer1 {
	position:absolute;
	left:224px;
	top:479px;
	padding-top:5px;
	width:99px;
	height:21px;
	background-color:#fff;
	z-index:1;
}
.password1 {      
	 background-color:#f1f3f6;
	  border:1px solid #f1f3f6;
	  font-color:#ccc;
}

.youbian input{ border:0px none; background-color:transparent; color:#555;padding-left:10px;font-size:16px;width:100%;overflow: hidden;}
</style>
    <!--[if IE 6]>
    <script type="text/javascript" src="${basePath}/ehome/js/DD_belatedPNG.js" ></script>
    <script type="text/javascript">
        DD_belatedPNG.fix(‘b, s, img, span, .prev, .next, a, input, .youbian, td‘);
    </script>
    <![endif]-->
</head>
<body scroll="no">
<s:form name="form1" namespace="/sys" action="login_login">
<div id="lo_tf">
<div class="outside">
    <div class="head">
      <table width="1000" height="60" border="0" align="center" cellpadding="0" cellspacing="0">
        <tr>
          <td width="840" align="left"><img src="${basePath}/images/login/form_03.png"   width="332" height="47"/></td>
          <td align="center">&nbsp;&nbsp;<a href="#"></a></td>
        </tr>
      </table>
    </div>
    <div class="main2">
	   <div class="content">  
	   <div class="youbian">
	    <table width="251" border="0" cellpadding="0" cellspacing="0">
          <tr>
            <td height="12">&nbsp;</td>
          </tr>
          <tr>
           <td height="45" align="left"></td>
          </tr>
          <tr>
          	<td height="13">&nbsp;
            	<span><div height=20 valign="middle" style="padding-left: 18px">
            		<font color="red" id="errMsg"> <s:property value="loginResult"/> </font>
           		</div></span>
            </td>
          </tr>
          <tr>
            <td height="40">
			<table width="100%" border="0" cellpadding="0" cellspacing="0">
  <tr>
    	<td height="32" align="left"><span style="color:#767676;font-size:14px;">帐号:</span></td>
  </tr>
</table>

			<table width="100%" height="39" border="0" cellpadding="0" cellspacing="0">
              <tr>
                <td background="${basePath}/images/login/shuru_03.png" width=""><table width="100%" border="0" cellpadding="0" cellspacing="0">
                  <tr>
                    <td align="left">
                    <s:textfield id="account" name="user.account" cssClass="password1" cssStyle="color: #767676" size="31"/>
                    </td>
                  </tr>
                </table></td>
              </tr>
            </table></td>
          </tr>
		    <tr>
            <td height="10"><table width="100%" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td height="32" align="left"><span style="color:#767676;font-size:14px;">密&nbsp;&nbsp;码:</span></td>
  </tr>
</table></td>
          </tr>
          <tr>
            <td height="40"><table width="100%" height="39" border="0" cellpadding="0" cellspacing="0">
              <tr>
                <td background="${basePath}/images/login/shuru_03.png"><table width="100%" border="0" cellpadding="0" cellspacing="0">
                  <tr>
                    <td align="left">
                    	<s:password id="password" name="user.password" cssClass="password"  cssStyle="color: #767676" size="31"/>
                    </td>
                  </tr>
                </table></td>
              </tr>
            </table></td>
          </tr>
          
		   <tr>
            <td height="10">&nbsp;</td>
          </tr>
          <tr>
            <td height="40"><table width="100%" border="0" cellpadding="0" cellspacing="0">
              <tr>
                <td align="right"><a href="#" onclick="javascript:logins();"><img src="${basePath}/images/login/form_15.png" width="95" height="37"/></a></td>
                <td width="18">&nbsp;</td>
                <td align="left"><img src="${basePath}/images/login/form_17.png" width="95" height="37" |&nbsp;国税局&nbsp;&nbsp;2014年</div>
</div>
</div>
</s:form>
</body>
</html>

4、项目主页

在web.xml文件中指定项目首页

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

index.jsp ,它的作用是跳转到登录页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:redirect url="/sys/login_toLoginUI.action"></c:redirect>
时间: 2024-10-13 23:24:09

SSH系列:(19)系统首页、子系统首页、登录页、项目主页的相关文章

【SSO单点系列】(3):登录页验证码的添加

这一篇主要是讲解怎么在登录页上添加验证码功能,默认的登录页是只有用户名与密码功能.其他我觉得加验证码没什么用,因为现在我部门做的系统主要是放在内网里,外网是不能访问的.登录页的验证码主要是为了防止进账号进行暴力破解,不过我觉得客户估计也不会没事去搞这玩意.以上只是我自己的个人见解,可能有失偏颇,就当作是对客户的愤怒的一种发泄吧,大家看看就好,最近真是被客户搞得头都大了.不过,如果你的系统放在外网上,那验证码是必须要加上的 .  好了,牢骚发的差不多了,下面进入正题吧! 最终效果图 简单做了个页面

CAS 之自定义登录页实践

1. 动机 用过 CAS 的人都知道 CAS-Server端是单独部署的,作为一个纯粹的认证中心.在用户每次登录时,都需要进入CAS-Server的登录页填写用户名和密码登录,但是如果存在多个子应用系统时,它们可能都有相应风格的登录页面,我们希望直接在子系统中登录成功,而不是每次都要跳转到CAS的登录页去登录. 2. 开始分析问题 其实仔细想一想,为什么不能直接在子系统中将参数提交至 cas/login 进行登录呢? 于是便找到了CAS在登录认证时主要参数说明: service        

SSH系列:(21)Session过期,登录页面嵌套的问题

在系统中使用了frameset,当前用户的系统登录信息失效后:如果再点击左边的菜单,那么在右边的显示登录页面,而正确的应该是整个页面返回到登录页. 解决这个问题:应该在跳转到登录页面中使用js脚本判断,是否当前页面在框架内,即当前页面的窗口是否是顶级窗口,如果是子窗口的话:可以直接刷新父窗口的地址则会自动地整个页面跳转为登录页. <scripttype="text/javascript">          if(window!= window.parent){      

【SSO单点系列】(2):CAS登录页的个性化定制

上一篇 [SSO单点系列](1):CAS环境的搭建介绍了CAS最简单环境的搭建,以及一个例子用来讲解CAS的一个最基础的用法. 今天主要是介绍如何对CAS登录页进行个性化定制.    一.开始 下图是CAS默认的登录界面,可以看到这界面是肯定不能直接用在生产环境上的,因为上面的有许多英文,简单来说,这是一个对客户非常不友好的界面.那么怎么修改它呢?我们接着往下看! ps:这个页面在工程中的地址为 cas\WEB-INF\view\jsp\default\ui\casLoginView.jsp,大

博客系统-程序结构-注册登录登出

注册 c判断是否提交了注册数据 是 l如果密码和用户名任一为空 l如果确认密码和密码不一致 m添加用户 c跳转登录页 否 c显示注册页面(提交验证) 登录 判断是否提交了登录数据 c后台验证登录数据->验证类 判断是否在锁定时间内 m判断是否存在登录数据 存在登录用户 重置失败次数和失败登录时间 更新登录时间,ip c设置session的用户名,用户id,权限,角色 c记录日志 c判断跳转(管理首页/跳转到来源页) 跳转 不存在登录用户 记录登录失败时间 跳转登录页 设置session 显示登录

增强VPS SSH账号安全:改端口,禁用Root,密钥登录,Denyhosts防暴力攻击

VPS SSH账号是我们日常管理VPS的主要登入方式,尤其是Root账号,对Linux系统安全至关重要.以前好多站长喜欢用Putty中文版,这实际是别人修改官方Putty汉化而来,这些软件被植入了后门,导致好几个有名的站点信息泄露,损失惨重. 如何知道自己的VPS账号正在遭受坏人的扫描和暴力破解呢?简单的方法就是查看日志:cat /var/log/auth.log.如何来增强VPS SSH账号的安全性呢?除了养成使用正规软件的好习惯外,还要从VPS本身来加强VPS SSH账号的安全性. 默认的S

Centos7 SSH安全防护---系统安全管家

我们在日常的办公中,会在自己的手机或者电脑上安装一些管理软件,依我个人来说吧~我手机上安装了QQ安全中心.淘宝安全中心及其他软件的管家等,说到底这些功能的目的就是为了检测及保护我们对应的应用服务,所以在安全及功能上大家相对比较认可的 ,同样,我们今天介绍Centos7的系统安全管家一样,需要对我们的系统登录进行保驾护航,到底是怎么个保护法呢,我们都知道linux的登陆方式通过ssh协议及crt.xshell工具进行登陆管理的,加上现在的网络安全意识又不好,很容易受到别人的攻击,所以我们就通过sh

权限认证系统, 实现类似单点登录的功能

用于统一管理所有集采相关站点的token,实现类似单点登录的功能.主要用于多服务集群, 各子系统单独登录,想要实现单点登录的功能.首先 新建用户认证表(总表),包括子系统所有的用户,要求token唯一性和随机性.用户第一次登陆时没有token,去认证系统验证用户名和密码,验证通过后认证系统会生成一个新的token,并同步到所有子系统的用户表,同时将该token返回给浏览器保存在cookie中,用户下次访问所有相关子系统时,验证token通过即登录成功. 原文地址:https://www.cnbl

redis 系列19 客户端

原文:redis 系列19 客户端 一. 概述 Redis服务器是可以与多个客户端建立网络连接,每个客户端可以向服务器发送命令请求,而服务器则接收并处理客户端发送的命令请求,并向客户端返回命令回复.通过使用I/O多路复用技术实现的文件事件处理器,Redis服务器使用单进程单线程的方式来处理命令请求,并与多个客户端进行网络通信. 1.1 伪客户端和普通客户端 对于每个与服务器进行连接的客户端,服务器都为这些客户端建立了相应的redis.h/redisClient结构(客户端状态),这个结构保存了客