SpringAOP实现登录验证的操作代码

要求任何操作都建立在已经登录的基础上,登录操作除外。。。。

使用Spring AOP不仅简单,还不会对其他部件中产生影响

以下具体代码实现:

package com.joey.util;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;

/**
 * 登录验证AOP
 */
@Component
@Aspect
public class LoginHelper {

    private static Logger logger = LogManager.getLogger(LoginHelper.class.getName());

    @Pointcut("within(com.joey.controller..*)&&!within(com.joey.controller.IndexController)") // IndexController中写了登录方法
    public void login() {
    }

    @Around("login()")
    public Object auth(ProceedingJoinPoint joinPoint) throws Throwable {
        // 获取session中的用户信息
     HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String username = (String) request.getSession().getAttribute("username");

        if (username == null) {
            logger.info("未登录");
            return new ModelAndView("redirect:/login");
        }
        logger.info("username: " + username);
        return joinPoint.proceed();
    }
}
既然要从session中获取用户信息,那么肯定要先保存的。可以自登录方法中保存username

package com.joey.controller;

import com.joey.model.User;
import com.joey.service.UserService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

@Controller
@RequestMapping("/")
public class IndexController {
private static Logger logger = LogManager.getLogger(IndexController.class.getName());

@Resource(name = "userService")
private UserService userService;

@RequestMapping(value = {"", "index", "login"}, method = RequestMethod.GET)
public String index() {
    return "login";
}

/**
 * 管理员/普通用户登陆
 *
 * @param username
 * @param password
 * @return
 */
@RequestMapping(value = {"login"}, method = RequestMethod.POST)
public ModelAndView login(HttpServletRequest request, String username, String password) {
    int id;
    try {
        id = userService.login(username, password);
    } catch (Exception e) {
        e.printStackTrace();
        logger.info("not found");
        return new ModelAndView("login")
                .addObject("msg", "Try Again");
    }
    User user = userService.selectByPrimaryKey(id);
    request.getSession().setAttribute("username", user.getName());  // 保存username到session看这里
    return new ModelAndView(user.getAdmin() == 1 ? "admin" : "home")
            .addObject("id", user.getId())
            .addObject("username", user.getName())
            .addObject("description", user.getDescription())
            .addObject("isAdmin", user.getAdmin() == 1 ? "admin" : "user");
}

@RequestMapping(value = "home", method = RequestMethod.GET)
public String home() {
    return "admin";
}

}

到此这篇关于SpringAOP实现登录验证的文章就介绍到这了,更多相关SpringAOP登录验证内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • spring aop action中验证用户登录状态的实例代码

    最近在学习ssh框架时,照着网上做了一个商城系统,之前在一些需要用户存在的操作中,都是在每一个action中写重复的代码,这样做现在想起来并不好,想起了spring的aop,于是想通过aop来给每个需要用户操作的Action验证用户登录状态. 想法是这样的: 1. 用户登录时把userId放入session中 2. 通过spring 写一个advice来获取session中的userId,判断用户登录状态,如果userId不符合,则抛出自定义异常 3. 通过struts中配置来捕获异常,跳转界面

  • springboot aop配合反射统一签名验证实践

    目录 aop配合反射统一签名验证 接口统一签名校验 第一种aop 方式实现 第二种拦截器 aop配合反射统一签名验证 直接上代码,作为记录. CheckSignAspect.java @Aspect //定义一个切面 @Configuration @Log4j2 public class CheckSignAspect { // 定义切点Pointcut @Pointcut("execution(* com.lsj.xxl.controller.*.*CheckSign(..))")

  • SpringBoot使用AOP+注解实现简单的权限验证的方法

    SpringAOP的介绍:传送门 demo介绍 主要通过自定义注解,使用SpringAOP的环绕通知拦截请求,判断该方法是否有自定义注解,然后判断该用户是否有该权限.这里做的比较简单,只有两个权限:一个普通用户.一个管理员. 项目搭建 这里是基于SpringBoot的,对于SpringBoot项目的搭建就不说了.在项目中添加AOP的依赖:<!--more---> <!--AOP包--> <dependency> <groupId>org.springfram

  • SpringAOP实现登录验证的操作代码

    要求任何操作都建立在已经登录的基础上,登录操作除外.... 使用Spring AOP不仅简单,还不会对其他部件中产生影响 以下具体代码实现: package com.joey.util; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.ann

  • QT连接Oracle数据库并实现登录验证的操作步骤

    目的: 本文实现QT登录界面,输入账号和密码后,系统连接Oracle数据进行判断账号和密码(MD5加密)是否和数据库一致,如果一致则提示登录成功. 开发环境:Windows10+QT5.14.2+Oracle11G R2 操作步骤: 1.打开QT软件,创建一个新的Application项目 2.设计界面并修改代码: 2.1修改项目配置文件,添加sql字符串表示要对数据库进行操作. 2.2登录界面LoginForm设计 2.3编写登录界面代码 LoginForm.h代码如下: #ifndef LO

  • Vue实战之vue登录验证的实现代码

    最近一直在撸一个给大学生新生用的产品,在撸的时候有时候会发现自己力不从心,是不是我的能力下降,是不是我该放弃我的最热爱的事业了?这对我的心灵造成了巨大的伤害,所以我决定向苍老师起誓一定练好我这双手--好好写代码(想多的同学赶紧去面壁5秒钟再过来往下看)--- 我做的这个产品是课堂在线编程教学工具,由于涉及到商业问题,这里就不能和大家分享了,但是我可以把里面我认为很牛(zhuang)X(bi)的技术和大家分享分享啊. 如果你觉得我写的很 low的话欢迎加入igeekbar裙里来喷我啊,我在那里等你

  • vue+egg+jwt实现登录验证的示例代码

    原理:vue前端登录,提交账号密码给egg后端,后端比对信息后,使用jsonwebtoken对用户信息进行签名生成token,之后通过cookie返回给vue前端,前端需要使用token里的信息就使用js-base64进行token第二段解码即可. vue前端路由跳转,进入路由前置守卫检测cookie中的token是否存在,不存在(已过期)则跳转登录,否则继续执行,然后在http拦截器里请求时存在token请求头带上token,后端未得到header则返回错误码,得到则用jsonwebtoken

  • php自动注册登录验证机制实现代码

    背景: 在phpwind站点后台添加一个名为"广告管家"(广告管家为CNZZ的一款广告投放的应用)的应用,整个"广告管家"的应用是通过iframe载入,载入的具体内容根据不同站点显示针对该站点的具体内容,为了提高易用性,有以下的两点要求: 1.首次进入"广告管家"页面自动注册CNZZ账户 2.以后每次进入"广告管家"页面默认为首次注册的CNZZ账户 设计: 1.尝试载入用户帐号和密码信息,此信息保存在数据库或是文本缓存中 2.

  • S2SH整合JQuery+Ajax实现登录验证功能实现代码

    不多说了,上码 action 复制代码 代码如下: package com.lk.action; import javax.annotation.Resource; import com.googlecode.jsonplugin.annotations.JSON; import com.lk.service.StudentControl; import com.opensymphony.xwork2.ActionSupport; public class LoginAjaxAction ext

  • Vue+Flask实现简单的登录验证跳转的示例代码

    本文介绍了Vue+Flask实现简单的登录验证跳转,分享给大家,具体如下: 文件位置: login.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Login</title> <script type="text/javascript" src="../sta

  • Python模拟用户登录验证

    本文实例为大家分享了Python模拟用户登录验证的具体代码,供大家参考,具体内容如下 1.功能简介 此程序模拟用户登录验证的过程,实现用户名输入.黑名单检测.用户有效性判别.密码输入及验证等.用户在3次以内输入正确密码登陆成功,连续输错3次密码登陆失败,且该用户名被记录在黑名单,黑名单中的用户被锁定不能再登陆. 2.实现方法 本程序采用python语言编写,将各项任务进行分解并用定义对应的函数来处理,从而使程序结构清晰,易于维护.主要编写了四个函数: login() #登陆函数,为主函数,完成用

  • JavaScript登录验证基础教程

    本文实例为大家分享了js登录验证的具体代码,供大家参考,具体内容如下 1.<script></script>的三种用法: 1.放在<body>中 2.放在<head>中 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>欢迎你,请先登陆!</title> &l

  • jQuery+ajax实现用户登录验证

    本文实例为大家分享了jQuery+ajax实现用户登录验证的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>登录界面</title> <style type="text/css"> *{ margin: 0; padding: 0; } h3{ display: block;

随机推荐