亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一般給用戶是怎么設置權限的。

一般給用戶是怎么設置權限的。

想要飛的更高 2015-04-10 21:39:39
在jsp中,在管理員頁面,勾選一些項目,然后在普通用戶訪問時,只能查到管理員勾選的頁面。原來一個學長做的是只有篩選功能的,能從這些項目中選出某些特定的項,比如:圖書館。而我想要的是,要我沒選圖書館,別人就搜不到圖書館。這該怎么實現。是可以再用戶頁面隱藏這些項嗎?
查看完整描述

3 回答

?
碼農的希望

TA貢獻10條經驗 獲得超2個贊

回復 想要飛的更高:RBAC ? 基于角色的權限控制
??tb_user
??tb_role
??tb_userrole
??tb_menu(增、刪、改、查)
??tb_rolemenu
1 說明
我們給出三個頁面:index.jsp、user.jsp、admin.jsp。
??index.jsp:誰都可以訪問,沒有限制;
??user.jsp:只有登錄用戶才能訪問;
??admin.jsp:只有管理員才能訪問。

2 分析
設計User類:username、password、grade,其中grade表示用戶等級,1表示普通用戶,2表示管理員用戶。
當用戶登錄成功后,把user保存到session中。
創建LoginFilter,它有兩種過濾方式:
??如果訪問的是user.jsp,查看session中是否存在user;
??如果訪問的是admin.jsp,查看session中是否存在user,并且user的grade等于2。

3 代碼
User.java
public class User {
?private String username;
?private String password;
?private int grade;

}

為了方便,這里就不使用數據庫了,所以我們需要在UserService中創建一個Map,用來保存所有用戶。Map中的key中用戶名,value為User對象。
UserService.java
public class UserService {
?private static Map<String,User> users = new HashMap<String,User>();
?static {
??users.put("zhangSan", new User("zhangSan", "123", 1));
??users.put("liSi", new User("liSi", "123", 2));
?}
?
?public User login(String username, String password) {
??User user = users.get(username);
??if(user == null) return null;
??return user.getPassword().equals(password) ? user : null;
?}
}

login.jsp
? <body>
? <h1>登錄</h1>
? ?<p style="font-weight: 900; color: red">${msg }</p>
??? <form action="<c:url value='/LoginServlet'/>" method="post">
??? ?用戶名:<input type="text" name="username"/><br/>
??? ?密 碼:<input type="password" name="password"/><br/>
??? ?<input type="submit" value="登錄"/>
??? </form>
? </body>

index.jsp
? <body>
??? <h1>主頁</h1>
??? <h3>${user.username }</h3>
??? <hr/>
??? <a href="<c:url value='/login.jsp'/>">登錄</a><br/>
??? <a href="<c:url value='/user/user.jsp'/>">用戶頁面</a><br/>
??? <a href="<c:url value='/admin/admin.jsp'/>">管理員頁面</a>
? </body>

/user/user.jsp
<body>
<h1>用戶頁面</h1>
<h3>${user.username }</h3>
<hr/>
</body>

/admin/admin.jsp
<body>
? <h1>管理員頁面</h1>
? <h3>${user.username }</h3>
? <hr/>
</body>

LoginServlet
public class LoginServlet extends HttpServlet {
?public void doPost(HttpServletRequest request, HttpServletResponse response)
???throws ServletException, IOException {
??request.setCharacterEncoding("utf-8");
??response.setContentType("text/html;charset=utf-8");
??
??String username = request.getParameter("username");
??String password = request.getParameter("password");
??UserService userService = new UserService();
??User user = userService.login(username, password);
??if(user == null) {
???request.setAttribute("msg", "用戶名或密碼錯誤");
???request.getRequestDispatcher("/login.jsp").forward(request, response);
??} else {
???request.getSession().setAttribute("user", user);
???request.getRequestDispatcher("/index.jsp").forward(request, response);
??}
?}
}

LoginUserFilter.java
? <filter>
??? <display-name>LoginUserFilter</display-name>
??? <filter-name>LoginUserFilter</filter-name>
??? <filter-class>cn.itcast.filter.LoginUserFilter</filter-class>
? </filter>
? <filter-mapping>
??? <filter-name>LoginUserFilter</filter-name>
??? <url-pattern>/user/*</url-pattern>
? </filter-mapping>
public class LoginUserFilter implements Filter {
?public void destroy() {}
?public void init(FilterConfig fConfig) throws ServletException {}

?public void doFilter(ServletRequest request, ServletResponse response,
???FilterChain chain) throws IOException, ServletException {
??response.setContentType("text/html;charset=utf-8");
??HttpServletRequest req = (HttpServletRequest) request;
??User user = (User) req.getSession().getAttribute("user");
??if(user == null) {
???response.getWriter().print("您還沒有登錄");
???return;
??}
??chain.doFilter(request, response);
?}
}

LoginAdminFilter.java
? <filter>
??? <display-name>LoginAdminFilter</display-name>
??? <filter-name>LoginAdminFilter</filter-name>
??? <filter-class>cn.itcast.filter.LoginAdminFilter</filter-class>
? </filter>
? <filter-mapping>
??? <filter-name>LoginAdminFilter</filter-name>
??? <url-pattern>/admin/*</url-pattern>
? </filter-mapping>
public class LoginAdminFilter implements Filter {
?public void destroy() {}
?public void init(FilterConfig fConfig) throws ServletException {}

?public void doFilter(ServletRequest request, ServletResponse response,
???FilterChain chain) throws IOException, ServletException {
??response.setContentType("text/html;charset=utf-8");
??HttpServletRequest req = (HttpServletRequest) request;
??User user = (User) req.getSession().getAttribute("user");
??if(user == null) {
???response.getWriter().print("您還沒有登錄!");
???return;
??}
??if(user.getGrade() < 2) {
???response.getWriter().print("您的等級不夠!");
???return;
??}
??chain.doFilter(request, response);
?}
}

查看完整回答
反對 回復 2015-04-11
?
想要飛的更高

TA貢獻2條經驗 獲得超0個贊

謝謝你

查看完整回答
反對 回復 2015-04-11
  • 3 回答
  • 2 關注
  • 2446 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號