java學習
文章目錄
- java學習
- 內容
內容
ssm專案利用攔截器實作根據資源權限限制訪問,
攔截器代碼
package com.chz.ssm.interceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.chz.ssm.domain.Permission;
import com.chz.ssm.domain.Role;
import com.chz.ssm.domain.UserInfo;
import com.chz.ssm.service.UserService;
import java.io.PrintWriter;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/*
自定義攔截器
*/
public class MyInterceptor1 implements HandlerInterceptor {
private UserService userService;
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
/**
* 預處理:controller方法執行前 true放行,執行下一個攔截器,如果沒有,執行controller中的方法 false不放行
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
Set<String> set = new HashSet<String>();//hashset集合不重復
List<String> newList = new ArrayList<String>();//用于去重處理
String id = null;//用戶id
List<Permission> permissions = null;//權限集合
List<String> pList = new ArrayList<>();//用于和set集合配合去重
System.out.println("執行前");
System.out.println("PowerInterceptor:" + request.getContextPath() + "," + request.getRequestURI() + ","
+ request.getMethod());
SecurityContext context = SecurityContextHolder.getContext();
User user = (User) context.getAuthentication().getPrincipal();
String username = user.getUsername();//利用spring-security獲取當前登錄用戶的姓名
List<UserInfo> userList = userService.findAll();//查詢用戶資訊
for (UserInfo users : userList) {
if (users.getUsername().equals(username)) {
id = users.getId();//獲取用戶id
System.out.println(id);
}
}
UserInfo userInfo = userService.findById(id);//呼叫id查詢用戶具體資訊
List<Role> roleList = userInfo.getRoles();//將當前用戶的角色存入集合
for (Role rolename : roleList) {
permissions = rolename.getPermissions();//獲取權限內容
for (Permission p : permissions) {
pList.add(p.getUrl());//將權限存入pList
}
}
set.addAll(pList);
newList.addAll(set);//去重
System.out.println(newList);// 所有的權限串列
System.out.println(username);// 當前用戶名
String url = request.getRequestURI();//獲取請求路徑
String projectName = "/chz_ssm_web";
url = url.substring(projectName.length(), url.length());//洗掉專案名
System.out.println(url);
//判斷是否攔截
boolean flag = false;
//用戶是否存在指定url權限
if (newList.contains(url)) {
flag = true;
}
System.out.println(flag);
if (!flag) {
request.getRequestDispatcher("/permissionfailer.jsp").forward(request, response);
}
// for(String s:newList) {
// if(s.equals(url)) {
// flag=true;
// }
// }
// System.out.println(flag);
// if (flag == false) {
// request.getRequestDispatcher("/permissionfailer.jsp").forward(request, response);
// }
return flag;
}
/**
* 后處理方法,controller方法執行后,success.jsp執行之前
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("執行后");
}
/**
* success.jsp執行后,該方法會執行
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("執行最后");
}
}
物體類
permission權限類:
package com.chz.ssm.domain;
import java.util.List;
public class Permission {
private String id;
private String permissionName;
private String url;
private List<Role> roles;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPermissionName() {
return permissionName;
}
public void setPermissionName(String permissionName) {
this.permissionName = permissionName;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public List<Role> getRoles() {
return roles;
}
public void setRoles(List<Role> roles) {
this.roles = roles;
}
}
角色類:
package com.chz.ssm.domain;
import java.util.List;
public class Role {
private String id;
private String roleName;
private String roleDesc;
private List<Permission> permissions;
private List<UserInfo> users;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getRoleDesc() {
return roleDesc;
}
public void setRoleDesc(String roleDesc) {
this.roleDesc = roleDesc;
}
public List<Permission> getPermissions() {
return permissions;
}
public void setPermissions(List<Permission> permissions) {
this.permissions = permissions;
}
public List<UserInfo> getUsers() {
return users;
}
public void setUsers(List<UserInfo> users) {
this.users = users;
}
}
用戶類
package com.chz.ssm.domain;
import java.util.List;
public class UserInfo {
private String id;
private String username;
private String email;
private String password;
private String phoneNum;
private int status;
private String statusStr;
private List<Role> roles;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getStatusStr() {
if (status == 0) {
statusStr = "未開啟";
} else if (status == 1) {
statusStr = "開啟";
}
return statusStr;
}
public void setStatusStr(String statusStr) {
this.statusStr = statusStr;
}
public List<Role> getRoles() {
return roles;
}
public void setRoles(List<Role> roles) {
this.roles = roles;
}
}
頭大
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/264468.html
標籤:java
下一篇:JAVA學習第四天
