From a141e451c9da634d3b85bf390e41b1c3e99517c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=E5=98=89=E9=98=B3?= Date: Sat, 23 Jun 2018 18:54:19 +0800 Subject: [PATCH] =?UTF-8?q?RBAC=E8=AE=BE=E8=AE=A1=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E3=80=81=E6=8B=A6=E6=88=AA=E5=99=A8=E3=80=81AOP=E3=80=81?= =?UTF-8?q?=E8=A7=86=E5=9B=BE=E7=AD=89=E6=B5=8B=E8=AF=95=E9=80=9A=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- RBAC.pdf | Bin 0 -> 18580 bytes .../aspect/UploadAuthorizeAspect.java | 62 ++++++++++++++++++ .../controller/LoginController.java | 50 ++++++++++++++ .../dataobject/view/UserPermission.java | 26 ++++++++ .../fjy8018/fileupload/enums/PercodeEnum.java | 18 +++++ .../fileupload/enums/ResultVOEnum.java | 2 + .../interceptor/LoginInterceptor.java | 22 +++++++ .../fileupload/interceptor/WebAppConfig.java | 32 +++++++++ .../fileupload/repository/UserRepository.java | 2 + .../view/UserPermissionRepository.java | 9 +++ .../fileupload/service/UserService.java | 11 ++++ .../service/impl/UserServiceImpl.java | 33 ++++++++++ src/main/resources/static/js/login.js | 47 +++++++++++++ src/main/resources/templates/index.html | 26 ++++++++ .../repository/UserRepositoryTest.java | 9 +++ .../view/UserPermissionRepositoryTest.java | 30 +++++++++ 16 files changed, 379 insertions(+) create mode 100644 RBAC.pdf create mode 100644 src/main/java/top/fjy8018/fileupload/aspect/UploadAuthorizeAspect.java create mode 100644 src/main/java/top/fjy8018/fileupload/controller/LoginController.java create mode 100644 src/main/java/top/fjy8018/fileupload/dataobject/view/UserPermission.java create mode 100644 src/main/java/top/fjy8018/fileupload/enums/PercodeEnum.java create mode 100644 src/main/java/top/fjy8018/fileupload/interceptor/LoginInterceptor.java create mode 100644 src/main/java/top/fjy8018/fileupload/interceptor/WebAppConfig.java create mode 100644 src/main/java/top/fjy8018/fileupload/repository/view/UserPermissionRepository.java create mode 100644 src/main/java/top/fjy8018/fileupload/service/UserService.java create mode 100644 src/main/java/top/fjy8018/fileupload/service/impl/UserServiceImpl.java create mode 100644 src/main/resources/static/js/login.js create mode 100644 src/main/resources/templates/index.html create mode 100644 src/test/java/top/fjy8018/fileupload/repository/view/UserPermissionRepositoryTest.java diff --git a/RBAC.pdf b/RBAC.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ae1d4a8b1377d9f7058d99260b2155575a8298b6 GIT binary patch literal 18580 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 literal 0 HcmV?d00001 diff --git a/src/main/java/top/fjy8018/fileupload/aspect/UploadAuthorizeAspect.java b/src/main/java/top/fjy8018/fileupload/aspect/UploadAuthorizeAspect.java new file mode 100644 index 0000000..d966945 --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/aspect/UploadAuthorizeAspect.java @@ -0,0 +1,62 @@ +package top.fjy8018.fileupload.aspect; + +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import top.fjy8018.fileupload.constant.GlobalConstant; +import top.fjy8018.fileupload.dataobject.User; +import top.fjy8018.fileupload.dataobject.view.UserPermission; +import top.fjy8018.fileupload.enums.PercodeEnum; +import top.fjy8018.fileupload.enums.ResultVOEnum; +import top.fjy8018.fileupload.exception.FileUploadException; +import top.fjy8018.fileupload.service.UserService; + +import javax.servlet.http.HttpServletRequest; + +/** + * 上传权限校验 + * @author F嘉阳 + * @date 2018-06-23 16:13 + */ +@Slf4j +@Aspect +@Component +public class UploadAuthorizeAspect { + + @Autowired + private UserService userService; + + /** + * 过滤所有上传操作 + */ + @Pointcut("execution(public * top.fjy8018.fileupload.controller.UploadController.moreUpload(..))") + public void verify(){ + + } + + @Before("verify()") + public void doVerify(){ + ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest request = attributes.getRequest(); + + User user = (User)request.getSession().getAttribute(GlobalConstant.USER_SESSION_KEY); + if (user==null){ + throw new FileUploadException(ResultVOEnum.LOG_OUT); + } + + UserPermission userPermission = userService.findPermissionByUserName(user.getUsername()); + String[] percodes = userPermission.getPercode().split(":"); + + log.info("【上传AOP】percodes:{},userPermission:{}",percodes[1],userPermission); + + if (!percodes[1].equals(PercodeEnum.FILE_UPLOAD.getMsg())){ + throw new FileUploadException(ResultVOEnum.FORBIDDEN_ACCES); + } + + } +} diff --git a/src/main/java/top/fjy8018/fileupload/controller/LoginController.java b/src/main/java/top/fjy8018/fileupload/controller/LoginController.java new file mode 100644 index 0000000..98bcecf --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/controller/LoginController.java @@ -0,0 +1,50 @@ +package top.fjy8018.fileupload.controller; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import top.fjy8018.fileupload.dataobject.User; +import top.fjy8018.fileupload.form.LoginForm; +import top.fjy8018.fileupload.service.UserService; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import static top.fjy8018.fileupload.constant.GlobalConstant.USER_SESSION_KEY; + +/** + * @author F嘉阳 + * @date 2018-06-23 16:34 + */ +@Slf4j +@Controller +public class LoginController { + + @Autowired + private UserService userService; + + @Resource + HttpServletRequest request; + + @GetMapping(value = {"/index","login"}) + public String toLoginPage(){ + return "index"; + } + + @PostMapping("/dologin") + public String doLogin(LoginForm loginForm) { + + log.info("【loginForm】{}",loginForm); + + User user = userService.findOneByUserName(loginForm.getUserName()); + if (user!=null){ + request.getSession().setAttribute(USER_SESSION_KEY,user); + } + + return "home/upload.html"; + } +} diff --git a/src/main/java/top/fjy8018/fileupload/dataobject/view/UserPermission.java b/src/main/java/top/fjy8018/fileupload/dataobject/view/UserPermission.java new file mode 100644 index 0000000..64e215b --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/dataobject/view/UserPermission.java @@ -0,0 +1,26 @@ +package top.fjy8018.fileupload.dataobject.view; + +import lombok.Data; +import org.hibernate.annotations.Immutable; +import org.hibernate.annotations.Subselect; + +import javax.persistence.Entity; +import javax.persistence.Id; + +/** + * @author F嘉阳 + * @date 2018-06-23 18:25 + */ +@Entity +@Immutable +@Subselect("SELECT * FROM v_sys_user_permission") +@Data +public class UserPermission { + + @Id + private String username; + + private String percode; + + private Integer parentid; +} diff --git a/src/main/java/top/fjy8018/fileupload/enums/PercodeEnum.java b/src/main/java/top/fjy8018/fileupload/enums/PercodeEnum.java new file mode 100644 index 0000000..bc8b59c --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/enums/PercodeEnum.java @@ -0,0 +1,18 @@ +package top.fjy8018.fileupload.enums; + +import lombok.Getter; + +@Getter +public enum PercodeEnum implements CodeEnum{ + FILE_UPLOAD(3,"upload"), + ; + + private Integer code; + + private String msg; + + PercodeEnum(Integer code, String msg) { + this.code = code; + this.msg = msg; + } +} diff --git a/src/main/java/top/fjy8018/fileupload/enums/ResultVOEnum.java b/src/main/java/top/fjy8018/fileupload/enums/ResultVOEnum.java index 0b6dc8b..2837d09 100644 --- a/src/main/java/top/fjy8018/fileupload/enums/ResultVOEnum.java +++ b/src/main/java/top/fjy8018/fileupload/enums/ResultVOEnum.java @@ -8,6 +8,8 @@ package top.fjy8018.fileupload.enums; public enum ResultVOEnum implements CodeEnum { UPLOAD_SUCCESS(0,"上传成功"), UPLOAD_FAIL(-1,"上传失败"), + FORBIDDEN_ACCES(1,"没有访问权限"), + LOG_OUT(2,"未登录"), ; private Integer code; diff --git a/src/main/java/top/fjy8018/fileupload/interceptor/LoginInterceptor.java b/src/main/java/top/fjy8018/fileupload/interceptor/LoginInterceptor.java new file mode 100644 index 0000000..26b1c0c --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/interceptor/LoginInterceptor.java @@ -0,0 +1,22 @@ +package top.fjy8018.fileupload.interceptor; + +import org.springframework.web.servlet.HandlerInterceptor; +import top.fjy8018.fileupload.constant.GlobalConstant; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * 登录拦截器 + */ +public class LoginInterceptor implements HandlerInterceptor { + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + Object user = request.getSession().getAttribute(GlobalConstant.USER_SESSION_KEY); + if (user==null){ + response.sendRedirect("/fileupload/index"); + return false; + } + return true; + } +} diff --git a/src/main/java/top/fjy8018/fileupload/interceptor/WebAppConfig.java b/src/main/java/top/fjy8018/fileupload/interceptor/WebAppConfig.java new file mode 100644 index 0000000..d8fc3ee --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/interceptor/WebAppConfig.java @@ -0,0 +1,32 @@ +package top.fjy8018.fileupload.interceptor; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebAppConfig implements WebMvcConfigurer { + + /** + * 注册拦截器 + * @param registry + */ + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/home/**").addPathPatterns("/upload/**"); + } + + /** + * 排除静态资源 + * @param registry + */ + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/cms/js/**").addResourceLocations("classpath:/js/"); + registry.addResourceHandler("/cms/css/**").addResourceLocations("classpath:/css/"); + //registry.addResourceHandler("/css/**").addResourceLocations("classpath:/css/"); + registry.addResourceHandler("/cms/fonts/**").addResourceLocations("classpath:/fonts/"); + registry.addResourceHandler("/cms/images/**").addResourceLocations("classpath:/images/"); + } +} diff --git a/src/main/java/top/fjy8018/fileupload/repository/UserRepository.java b/src/main/java/top/fjy8018/fileupload/repository/UserRepository.java index 29f41f8..9339f96 100644 --- a/src/main/java/top/fjy8018/fileupload/repository/UserRepository.java +++ b/src/main/java/top/fjy8018/fileupload/repository/UserRepository.java @@ -4,4 +4,6 @@ import org.springframework.data.jpa.repository.JpaRepository; import top.fjy8018.fileupload.dataobject.User; public interface UserRepository extends JpaRepository { + + User findByUsername(String userName); } diff --git a/src/main/java/top/fjy8018/fileupload/repository/view/UserPermissionRepository.java b/src/main/java/top/fjy8018/fileupload/repository/view/UserPermissionRepository.java new file mode 100644 index 0000000..e90106b --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/repository/view/UserPermissionRepository.java @@ -0,0 +1,9 @@ +package top.fjy8018.fileupload.repository.view; + +import org.springframework.data.jpa.repository.JpaRepository; +import top.fjy8018.fileupload.dataobject.view.UserPermission; + +public interface UserPermissionRepository extends JpaRepository { + + UserPermission findByUsername(String userName); +} diff --git a/src/main/java/top/fjy8018/fileupload/service/UserService.java b/src/main/java/top/fjy8018/fileupload/service/UserService.java new file mode 100644 index 0000000..ff1d6cb --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/service/UserService.java @@ -0,0 +1,11 @@ +package top.fjy8018.fileupload.service; + +import top.fjy8018.fileupload.dataobject.User; +import top.fjy8018.fileupload.dataobject.view.UserPermission; + +public interface UserService { + + User findOneByUserName(String userName); + + UserPermission findPermissionByUserName(String userName); +} diff --git a/src/main/java/top/fjy8018/fileupload/service/impl/UserServiceImpl.java b/src/main/java/top/fjy8018/fileupload/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..3ddb3d9 --- /dev/null +++ b/src/main/java/top/fjy8018/fileupload/service/impl/UserServiceImpl.java @@ -0,0 +1,33 @@ +package top.fjy8018.fileupload.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import top.fjy8018.fileupload.dataobject.User; +import top.fjy8018.fileupload.dataobject.view.UserPermission; +import top.fjy8018.fileupload.repository.UserRepository; +import top.fjy8018.fileupload.repository.view.UserPermissionRepository; +import top.fjy8018.fileupload.service.UserService; + +/** + * @author F嘉阳 + * @date 2018-06-23 16:37 + */ +@Service +public class UserServiceImpl implements UserService { + + @Autowired + private UserRepository userRepository; + + @Autowired + private UserPermissionRepository userPermissionRepository; + + @Override + public UserPermission findPermissionByUserName(String userName) { + return userPermissionRepository.findByUsername(userName); + } + + @Override + public User findOneByUserName(String userName) { + return userRepository.findByUsername(userName); + } +} diff --git a/src/main/resources/static/js/login.js b/src/main/resources/static/js/login.js new file mode 100644 index 0000000..74bc3d5 --- /dev/null +++ b/src/main/resources/static/js/login.js @@ -0,0 +1,47 @@ +var Main = { + data() { + var checkUserName = (rule, value, callback) => { + if (!value) { + return callback(new Error('用户名不能为空')); + } + callback(); + }; + var validatePass = (rule, value, callback) => { + if (value === '') { + callback(new Error('请输入密码')); + } + callback(); + }; + return { + ruleForm2: { + password: '', + userName: '' + }, + rules2: { + password: [ + {validator: validatePass, trigger: 'blur'} + ], + userName: [ + {validator: checkUserName, trigger: 'blur'} + ] + } + }; + }, + methods: { + submitForm(formName) { + this.$refs[formName].validate((valid) => { + if (valid) { + document.getElementById('loginForm').submit(); + } else { + console.log('error submit!!'); + return false; + } + }); + }, + resetForm(formName) { + this.$refs[formName].resetFields(); + } + } +} +var Ctor = Vue.extend(Main) +new Ctor().$mount('#app') \ No newline at end of file diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html new file mode 100644 index 0000000..b53335e --- /dev/null +++ b/src/main/resources/templates/index.html @@ -0,0 +1,26 @@ + + + + + +
+
+

登录

+ + + + + + + + + 提交 + 重置 + + +
+ + + \ No newline at end of file diff --git a/src/test/java/top/fjy8018/fileupload/repository/UserRepositoryTest.java b/src/test/java/top/fjy8018/fileupload/repository/UserRepositoryTest.java index 72affc6..d0debb6 100644 --- a/src/test/java/top/fjy8018/fileupload/repository/UserRepositoryTest.java +++ b/src/test/java/top/fjy8018/fileupload/repository/UserRepositoryTest.java @@ -1,5 +1,6 @@ package top.fjy8018.fileupload.repository; +import lombok.extern.slf4j.Slf4j; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -12,6 +13,7 @@ import javax.transaction.Transactional; import static org.junit.Assert.*; +@Slf4j @Component public class UserRepositoryTest extends EstestApplicationTests{ @@ -42,5 +44,12 @@ public class UserRepositoryTest extends EstestApplicationTests{ Assert.assertNotNull(res); } + @Test + public void findByUsername(){ + User res = repository.findByUsername("admin"); + log.info("【用户信息】{}",res.toString()); + Assert.assertNotNull(res); + } + } \ No newline at end of file diff --git a/src/test/java/top/fjy8018/fileupload/repository/view/UserPermissionRepositoryTest.java b/src/test/java/top/fjy8018/fileupload/repository/view/UserPermissionRepositoryTest.java new file mode 100644 index 0000000..013b750 --- /dev/null +++ b/src/test/java/top/fjy8018/fileupload/repository/view/UserPermissionRepositoryTest.java @@ -0,0 +1,30 @@ +package top.fjy8018.fileupload.repository.view; + +import lombok.extern.slf4j.Slf4j; +import org.junit.Assert; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import top.fjy8018.fileupload.EstestApplicationTests; +import top.fjy8018.fileupload.dataobject.view.UserPermission; +import top.fjy8018.fileupload.repository.UserRepository; + +import static org.junit.Assert.*; + +@Slf4j +@Component +public class UserPermissionRepositoryTest extends EstestApplicationTests{ + + @Autowired + private UserPermissionRepository repository; + + private static final String USER_NAME="admin"; + + @Test + public void findByUsername(){ + UserPermission userPermission = repository.findByUsername(USER_NAME); + log.info("【findByUsername】{}",userPermission); + + Assert.assertNotNull(userPermission); + } +} \ No newline at end of file