拦截器

登录拦截器
public class LoginInterceptor extends AbstractInterceptor {
	@Resource
	private IdentityService identityService;

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		/** 获取Session中的用户 */
		User user = (User) invocation.getInvocationContext().getSession()
				.get(AdminConstant.SESSION_USER);
		System.out.println("session_user:" + user);
		/** 定义标记 */
		boolean isLogin = false;
		if (user == null) {
			/**  获取Cookie */
			Cookie cookie = CookieTools.getCookie(AdminConstant.COOKIE_NAME);
			if (cookie != null) {
				/** 获取Cookie的值 userId(md5加密) */
				String userId = cookie.getValue();
				/** 获取用户 */
				user = identityService.getUser(userId, true);
				if (user != null) {
					/** 存入Session */
					invocation.getInvocationContext().getSession()
							.put(AdminConstant.SESSION_USER, user);
					/** 根据用户id查询所有的角色,再根据角色查询所有的权限 */
					Map> userAllPopedoms = identityService
							.getUserAllPopedoms(user.getUserId());
					/** 存入Session */
					invocation
							.getInvocationContext()
							.getSession()
							.put(AdminConstant.USER_ALL_POPEDOMS,
									userAllPopedoms);
				} else {
					isLogin = true;
				}
			} else {
				isLogin = true;
			}
		}
		return isLogin ? Action.LOGIN : invocation.invoke();
	}

}
 
  


登录方法拦截

@Override
	public Map login(String userId, String password,
			String vcode, int key) {
		try {
			Map map = new HashMap();
			map.put("tip", "验证码不正确!");
			map.put("status", 1);
			/** 获取Session中的验证码 */
			String code = (String) ActionContext.getContext().getSession()
					.get(VerifyAction.VERIFY_CODE);
			/** 判断验证码是否正确 */
			if (code != null && code.equalsIgnoreCase(vcode)) {
				/** 判断用户名与密码 */
				if (!StringUtils.isEmpty(userId)
						&& !StringUtils.isEmpty(password)) {
					/** 查询用户 */
					User user = getUser(userId, false);
					/** 判断用户与用户密码 */
					if (user != null
							&& user.getPassWord().equals(MD5.getMD5(password))) {
						// 判断用户状态码
						if (user.getStatus() == 1) {

							/** 存入Session */
							ActionContext.getContext().getSession()
									.put(AdminConstant.SESSION_USER, user);
							/** 判断key 是否可以记住用户 */
							if (key == 1) {
								/** 记住用户,操作cookie */
								CookieTools
										.addCookie(AdminConstant.COOKIE_NAME,
												user.getUserId(),
												AdminConstant.MAX_AGE);
							}

							map.put("tip", "登录成功!");
							map.put("status", 0);

							/** 根据用户Id查询所有的角色,再根据角色查询所有的权限 */
							Map> userAllPopedoms = getUserAllPopedoms(user
									.getUserId());
							/** 存入Session 保存用户 */
							ActionContext
									.getContext()
									.getSession()
									.put(AdminConstant.USER_ALL_POPEDOMS,
											userAllPopedoms);
						} else {
							// //0新建,1审核,2不通过审核,3冻结
							// 分析,把他们放到数组中,通过下标来读取,审核放在里面咩关系
							// 反正读取不到,如果不填,会更加麻烦,善于思考利用
							String[] arr = { "新建", "审核", "不通过审核", "冻结" };
							map.put("tip", "您处于【" + arr[user.getStatus()]
									+ "】状态,请联系管理员!");
							map.put("status", 4);
						}

					} else {
						map.put("tip", "用户名或密码不正确!");
						map.put("status", 3);
					}
				} else {
					map.put("tip", "用户名或密码不能为空!");
					map.put("status", 2);
				}
			}
			return map;
		} catch (Exception e) {
			throw new OAException("登录方法是出现异常!", e);
		}

	}

为什么两个类里面都使用获取所有权限?

双向选择

因为一个是存在Cookie里面,记住用户的时候就会从cookie里面获取权限。

另外一个是第一次登录的时候,里面是没有cookie,这时就要在登录的时候获取权限。



    	
    	
    		
    		
    		
    		
    		
    		
    			
    			
    		
    		
    		
    			
    			
    		
    	
    	
    	
    	
		
		
			/WEB-INF/jsp/admin/identity/user/user.jsp
		
		
			
		
		
			
			
				
				userIdExistData
			
		
		
		
		
		
			
			
			
			
			
			/WEB-INF/jsp/admin/identity/user/addUser.jsp
			
			/WEB-INF/jsp/admin/identity/user/addUser.jsp
			
			
			/WEB-INF/jsp/admin/identity/user/addUser.jsp
			
		
为什么有的要权限拦截器,有的配登录拦截器,有的不填拦截器

主要看页面有没有权限,数据库里面有权限地址就写权限拦截器,没有权限就配登录拦截器,因为要是数据库里面没有配置权限的请求地址,但是又使用的是默认权限拦截器,那么就会访问不了,除非引用登录拦截器才可以访问。


你可能感兴趣的:(项目(ssh)--OA办公系统,session,string,拦截器)