権限制御を実現するいくつかの方法
ITプログラマー開発必須-各種資源ダウンロードリスト、史上最も全IT資源、個人コレクション総括!
方式一:struts 1.x
ステップ1:定義.クラスをカスタマイズしてRequestProcessorクラスを継承し、親クラスのpublic void process(HttpServeretRequest request,HttpServeretResponse response)メソッドを書き換える.このメソッドは、ActionServiceletの役割と同様に、要求を処理するコントローラコンポーネントであり、ActionServiceletによって処理要求が呼び出される.すなわち、ActionFormおよびActionに入る前に処理される要求である.次のようになります.
ステップ2:登録.カスタムRequestProcessorクラスはstrusts-configである必要がある.xmlに登録します.次のようになります.
注意:
(1)プロセス()メソッドは,FormBeanを埋め込み,Actionのexecute()を呼び出す前に行う.
(2)このような方式の権限制御は、要求文字セット、応答文字セット等の処理に用いることができる.process(request,response);以降のコードは、応答したときのコードです.(検証済みですが、ここには詳細コードは書かれていません).
(3)struts1.xのこのような権限制御は*をフィルタするしかない.do(actionのurl-patternを*.doと仮定)の要求は、*をフィルタできない.jsp,*.htmlのファイル.
(4)欠陥:すべて*doのリクエストは例外なくプロセッサにリクエストされます.
方法2:フィルタフィルタを定義する
ステップ1:フィルタクラスをカスタマイズする、Filterインタフェースを実現してdoFilter()メソッドを書き換え、doFilter()で権限制御を行い、次のフィルタまたはActionまたはサーブレットに渡すとchainを呼び出す.doFilter(request,response)メソッド、chain.doFilter()後のコードは応答が戻ったときに呼び出されます
ステップ2:web.xmlに登録され、url-patternでは異なるフォーマットのリクエストに対して異なるフィルタを登録できます.
方法3:struts 2でカスタムブロッカー:参照:Struts 2で権限制御を実現する
方式一:struts 1.x
ステップ1:定義.クラスをカスタマイズしてRequestProcessorクラスを継承し、親クラスのpublic void process(HttpServeretRequest request,HttpServeretResponse response)メソッドを書き換える.このメソッドは、ActionServiceletの役割と同様に、要求を処理するコントローラコンポーネントであり、ActionServiceletによって処理要求が呼び出される.すなわち、ActionFormおよびActionに入る前に処理される要求である.次のようになります.
package edu.process;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.RequestProcessor;
public class RequestCharacterProcessor extends RequestProcessor {
@Override
public void process(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
//response.setContentType("text/html; charset=utf-8");
// session user
Object value = request.getSession().getAttribute("user");
//
if (value!=null) {
// , 。
super.process(request, response);
System.out.println("ddddddddddddddd");// , 。
}else {
//
response.sendRedirect("/login");
}
}
}
ステップ2:登録.カスタムRequestProcessorクラスはstrusts-configである必要がある.xmlに登録します.次のようになります.
struts-config.xml :
<controller processorClass="edu.encoding.RequestChinese"></controller>
:
<controller>
<set-property property="processorClass" value="edu.encoding.RequestChinese"/>
</controller>
注意:
(1)プロセス()メソッドは,FormBeanを埋め込み,Actionのexecute()を呼び出す前に行う.
(2)このような方式の権限制御は、要求文字セット、応答文字セット等の処理に用いることができる.process(request,response);以降のコードは、応答したときのコードです.(検証済みですが、ここには詳細コードは書かれていません).
(3)struts1.xのこのような権限制御は*をフィルタするしかない.do(actionのurl-patternを*.doと仮定)の要求は、*をフィルタできない.jsp,*.htmlのファイル.
(4)欠陥:すべて*doのリクエストは例外なくプロセッサにリクエストされます.
方法2:フィルタフィルタを定義する
ステップ1:フィルタクラスをカスタマイズする、Filterインタフェースを実現してdoFilter()メソッドを書き換え、doFilter()で権限制御を行い、次のフィルタまたはActionまたはサーブレットに渡すとchainを呼び出す.doFilter(request,response)メソッド、chain.doFilter()後のコードは応答が戻ったときに呼び出されます
package edu.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class PermissionFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println(" ...");
// , Servlet Action
chain.doFilter(request, response);
System.out.println(" ...");
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
ステップ2:web.xmlに登録され、url-patternでは異なるフォーマットのリクエストに対して異なるフィルタを登録できます.
<filter>
<filter-name>permission</filter-name>
<filter-class>edu.filter.PermissionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>permission</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
方法3:struts 2でカスタムブロッカー:参照:Struts 2で権限制御を実現する