项目中登录接口

我看了下,登录的时候,走的是直接是 检验的接口
点击登录 触发 verification.do
LginController

@Controller
public class LoginController{
	
	protected static final Logger log = LoggerFactory.getLogger(LoginController.class);
	
	@Autowired
	UserService userService;

	@Autowired
	UserMapper userMapper;

	@Autowired
	SettingMapper settingMapper;  //查 设置信息?

	@Autowired
	PositionInfoMapper positionInfoMapper; //查职位详情?
	
 	@Autowired
 	PermissionMapper permissionMapper; //查权限?

	/*用户登录---不过这个接口好像都没用到。毕竟还是老的jsp
	*/
	@RequestMapping("/login.do")
	public String login(HttpServletRequest request ,HttpServletResponse response)throws Exception{
		return "jsp/login/login"; //springMVC的配置,省略了.jsp
	}
	
	/*登出系统
	/
	@RequestMapping("/logout.do")
	@ResponseBody
	public String logout(HttpServletRequest request ,HttpServletResponse response){
		try{
				clearSession(request); //清除session
				return StringUtils.resultSuccessToJson(SystemUtils.getMessage("system.logout.success")); //就是“登出成功”
			 }catch(Exception e){
				return StringUtils.resultFailToJson(e);
			}
	}

}
//2019-03-25 --清除会话
public static final  void clearSession(HttpServletRequest request) throws Exception{
	try{
			Enumeration<String>  names =  request.getSession.getAtrributeNames();
				while(names.hasMoreElements() ){
					String  name = names.nextElement();
					request.getSession.removeAttibute(name);
				}
			}catch(Exception e){
			e.printStackTrace();
		}
//登录--用户校验--设置用户信息--添加token--初始化权限--系统信息设置
@RequestMapping("/verification.do")
@ResponseBody
public String verification(@RequestBody UserModel user,HttpServletRequest reuqest ,HttpServletResponse response)throws Exception{
	try{
			UserModel loginuser = verification(user);
			write(request,loginuser);
			}catch(Exception  e){
			 clearSession(request);
			 return StringUtils.resultFailToJson(e);
			}
}
//校验
public  final  UserModel verification(UserModel user)throws Exception{
		//清除会话--防止重复登录。
		clearSession(SystemUtils.getHttpServletRequest());
if(null == user){  throw new Exception("登录名或者密码不能为空"); }	
if(!StringUtils.isNotNullOrEmptyStr(user.getLoginName())){  throw new Exception("登录名不能为空"); }	
if(!StringUtils.isNotNullOrEmptyStr(user.getLoginPwd())){  throw new Exception("密码不能为空"); }
SystemUtils.setSessionId(JWTUtils.getToken()); //这个SystemUtils里面的变量副本,有很多,用来存值,比如token,currenConfigModel,request,userModel等。
SystemUtils.setCurrentConfigModel(new CurrentConfigModel()); //存CurrentConfigModel,用户成功登录后,再把信息放入CurrentConfigModel中。
boolean ldap = "true".equals(Property.getAppContext("ldap.switch"));
user = userService.loginCheck(user.getLoginName(),user.getLoginPwd(),ldap);
user.setConfig(SystemUtils.getCurrentConfigModel());  //实际上到这里,UserModel中的config依然是空的。但是这里我不是很明白,
//这里是从副本中拿的,但是副本中存的是一个new 出来的对象,怎么会有值?我debug确实有值啊。

SystemUtils.addToken(SystemUtils.getSessionId()); //这一步在SystemUtils中就只是一个方法,方法体都没有。应该不写 也可以。
//初始化权限
initPermission(SystemUtils.getHttpServletRequest());
user.setToken(SystemUtils.getSessionId());

//权限列表查询
PermissionModel model = new PermissionModel();
model.setUserId(SystemUtils.getUserModel().getRowId());
List<PermissionModel> permissionList = permissionMapper.queryPermission(model);
SystemUtils.setPermissionList(permissionList);

return user;
}
//记录用户信息--比如用户登录时候Ip地址,浏览器,版本,系统,登录时间等等,这样可以更加直观的解决用户问题。
void write(HttpServletRequest request ,UserModel model){
	try{
			SessionInfoModel model = getSessionInfoModel(request,user);
			userMapper.insertLoginInfo(model);
			}catch(Exception e){
				e.printStackTrace();
			}
}	
//获取用户登录时系统信息
SessionInfoModel  getSessionInfoModel(HttpServletRequest request ,UserModel user){
	SessionInfoModle model = new SessionInfoModel();
	String ua = request.getHeader("User-Agent");
	UserAgent userAgent = UserAgent.parseUserAgentString(ua);
	String remoteAddr = NetUtils.getIpAddress(request); //获取,远程Ip地址-ipV4
	model.setAddress(remoteAddr); //设置
	Browser browser = userAgent.getBrowser();
	model.setBrowser(browser.getName());
	model.setBrowserVersion(userAgent.getBrowserVersion().getversion());
	OperatingSystem os = userAgen.getOperatingSystem();
	model.setOs(os.getName());
	model.setLoginName(user.getLoginName());
	model.setName(user.getName());
	model.setServerIp(NetUtils.getLocalIpAddr().toString());
	model.setSessionId(request.getRequestedSessionId());
	return model;
}



}//类尾

//本来想弄登录的,没想到走到这个方法的时候,去看了下 ResourceBundle,又顺便补了下导出Excel,加了例子和说明,这样大家直接复制粘贴后就可以根据 例子导出Excel了。所以到下班还没弄到登录。下周在弄登录。
而且项目里面 登录进去后,触发了22个接口,我日我日我日。头大。无非就是各个模块。
//真的是 日了狗了,本来全部都写好了,但是忘记发布了,午睡起来后,长时间未反应,远程桌面直接被关闭了,又要重新 写。下次记得 午睡前一定要 发布!
//各种Model及其字段如下:
UserModel PermissionModel ConfigModel SessionInfoModel

1:UserModel(基础实体)extends BaseModel :
token–口令 position–职位 name–名字 email–电子邮件 birthday–生日 fax–传真 majorNet—主要网络 sex—性别
loginName—登陆名字 loginPwd—登陆密码 address—地址 department—部门 company—公司 firstName—名 lastName—姓
password1 password2 loginNames—查询用:需要查询的所有loginName CurrentConfigModel config—当前配置信息
除了最后一个字段,其他都是String类型。

2:PermissionModel implements Serializable
userId–用户Id vkey—视图key vname—视图名称 fkay—功能点key fname—功能点名称 vtype—视图类型 type—功能点类型
permit—功能点权限:0可读可见 1可读可写可见可点击 searchText–查询条件

3:ConfigModel(埋点信息)extends BaseModel
value—值 description—描述信息 List<String> notKeys

4:SessionInfoModel
name—登录人名字(非工号) brower—发送请求的浏览器 browerVersion–浏览器版本 os—操作系统 address—客户端Ip地址(v4)
serverIp—服务器地址 sessionId----请求的会话Id loginName—登录人账号

师父说过各Model中字段的前2个字母必须为小写。之前碰到过这种问题,忘记为什么了,反正以后记住就行,好像是get,set方法碰到前2个大写字母的时候无法解析。

然后初始化权限的sql 如下,我以为是置空,但不是的,只是查询
具体如下:

			<id column="key"       property="rowId" />
			<result column="TOTAL_NUM "   property="totalRecords" />
			<result column="CUR_PAGE"      property="curPage" />

			<result column="VALUE"                property="value" />
			<result column="DESCRIPTION"   property="decription">
		</resultMap>
<select id="getConfigAllList"  resultMap = "ConfigMapper" parameterType="com.xxxxx.common.model.ConfigModel" >
		select t.*
		from T_CONFIG t
		<where>
				<if test="rowId != null and  rowId != '' ">and t.KEY like '%'||#{rowId}||'%'</if>
				<if test="deacription != null and  description != '' ">and t.DESCRIPTION like '%'||#{description}||'%'</if>
				<if test="notKeys != null">
						and t.KEY not in 
						<foreach collection="notKeys" index="index"  item="item" open="(" separator="," close=")" >
							#{item}
						</foreach>
				</if>
		</where>
		order by t.KEY,t.DESCRIPTION
</select>

猜你喜欢

转载自blog.csdn.net/little_dream2018/article/details/88747312