私は長い間 JSP を学習しており、これまでに 7 ~ 8 つのプロジェクトに取り組みましたが、どのプロジェクトでも、ユーザーがログインすると、権限のあるページに直接ジャンプしたり、表示されたりしてしまいます。アクセス可能なページへのリンク。このアプローチを使用して、アクセスを単純に制御します。ログインせずにアドレスを入力してユーザーのページに直接アクセスできるとは思いませんでした。
JSP でのアクセス許可の制御は、Filter によって実現されます。すべての開発フレームワークには Filter が組み込まれています。開発フレームワークが適用できない場合は、次の実装方法を使用できます。
ログインフィルター.java
次のようにコードをコピーします。
public class LoginFilter はフィルターを実装します {
プライベート文字列permitUrls[] = null;
プライベート文字列 gotoUrl = null;
public void destroy() {
// TODO 自動生成されたメソッド スタブ
許可URL = null;
gotoUrl = null;
}
public void doFilter(ServletRequest リクエスト、ServletResponse レスポンス、
FilterChain チェーン) IOException、ServletException をスローする {
// TODO 自動生成されたメソッド スタブ
HttpServletRequest res=(HttpServletRequest) リクエスト;
HttpServletResponse resp=(HttpServletResponse)応答;
if(!isPermitUrl(リクエスト)){
if(filterCurrUrl(リクエスト)){
System.out.println("--->ログインしてください");
resp.sendRedirect(res.getContextPath()+gotoUrl);
戻る;
}
}
System.out.println("--->アクセスを許可");
chain.doFilter(リクエスト、レスポンス);
}
public boolean filterCurrUrl(ServletRequest request){
ブールフィルター = false;
HttpServletRequest res=(HttpServletRequest) リクエスト;
ユーザー user =(ユーザー) res.getSession().getAttribute("user");
if(null==ユーザー)
フィルター=真;
リターンフィルター。
}
public boolean isPermitUrl(ServletRequest リクエスト) {
ブール値 isPermit = false;
文字列 currentUrl = currentUrl(リクエスト);
if (permitUrls != null && allowedUrls.length > 0) {
for (int i = 0; i < allowedUrls.length; i++) {
if (permitUrls[i].equals(currentUrl)) {
isPermit = true;
壊す;
}
}
}
戻り値は許可です。
}
//リクエストアドレス
public String currentUrl(ServletRequest リクエスト) {
HttpServletRequest res = (HttpServletRequest) リクエスト;
文字列タスク = request.getParameter("タスク");
文字列パス = res.getContextPath();
文字列 uri = res.getRequestURI();
if (タスク != null) {//uri 形式 xx/ser
uri = uri.substring(path.length(), uri.length()) + "?" + "タスク="
+ タスク;
} それ以外 {
uri = uri.substring(path.length(), uri.length());
}
System.out.println("現在のリクエストアドレス:" + uri);
URIを返します。
}
public void init(FilterConfig filterConfig) throws ServletException {
// TODO 自動生成されたメソッド スタブ
文字列許可Urls = filterConfig.getInitParameter("permitUrls");
文字列 gotoUrl = filterConfig.getInitParameter("gotoUrl");
this.gotoUrl = gotoUrl;
if (permitUrls != null && allowedUrls.length() > 0) {
this.permitUrls = allowedUrls.split(",");
}
}
}
Web.xml
次のようにコードをコピーします。
<フィルター>
<フィルター名>ログインフィルター</フィルター名>
<filter-class>filter.LoginFilter</filter-class>
<初期パラメータ>
<param-name>無視</param-name>
<param-value>false</param-value>
</init-param>
<初期パラメータ>
<param-name>permitUrls</param-name>
<param-value>/,/servlet/Loginservlet?task=login,/public.jsp,/login.jsp</param-value>
</init-param>
<初期パラメータ>
<param-name>gotoUrl</param-name>
<param-value>/login.jsp</param-value>
</init-param>
</フィルター>
<フィルターマッピング>
<フィルター名>ログインフィルター</フィルター名>
<url-パターン>/*</url-パターン>
</フィルターマッピング>
この短いコードは主にユーザー ログイン フィルタリングを実装しており、権限フィルタリングの原理は同じです。ユーザーがログインしているかどうかの判断を、権限があるかどうかに変えるだけです!