Saya telah mempelajari JSP begitu lama, dan saya telah mengerjakan tujuh atau delapan proyek, tetapi di semua proyek, ketika pengguna masuk, dia akan langsung melompat ke halaman yang dia izinkan, atau menampilkan tautan ke halaman yang dapat diakses. Gunakan pendekatan ini untuk mengontrol akses secara naif. Saya tidak pernah menyangka jika saya tidak login, saya bisa langsung mengakses halaman pengguna dengan memasukkan alamatnya.
Kontrol izin di jsp dicapai melalui Filter. Semua kerangka pengembangan memiliki Filter yang terintegrasi ke dalamnya. Jika kerangka pengembangan tidak berlaku, metode implementasi berikut tersedia:
LoginFilter.java
Copy kode kodenya sebagai berikut:
kelas publik LoginFilter mengimplementasikan Filter {
pribadi String izinUrls[] = null;
String pribadi gotoUrl = null;
kehancuran publik void() {
// TODO Stub metode yang dibuat secara otomatis
izinUrls = null;
gotoUrl = nol;
}
public void doFilter(Permintaan ServletRequest, respons ServletResponse,
Rantai FilterChain) menampilkan IOException, ServletException {
// TODO Stub metode yang dibuat secara otomatis
HttpServletRequest res=(HttpServletRequest) permintaan;
HttpServletResponse resp=(HttpServletResponse)respon;
if(!isPermitUrl(permintaan)){
if(filterCurrUrl(permintaan)){
System.out.println("--->Silahkan login");
resp.sendRedirect(res.getContextPath()+gotoUrl);
kembali;
}
}
System.out.println("--->Izinkan akses");
chain.doFilter(permintaan, tanggapan);
}
filter boolean publikCurrUrl(permintaan ServletRequest){
filter boolean=salah;
HttpServletRequest res=(HttpServletRequest) permintaan;
Pengguna pengguna =(Pengguna) res.getSession().getAttribute("pengguna");
jika(null==pengguna)
filter=benar;
filter balik;
}
boolean publik isPermitUrl(Permintaan ServletRequest) {
boolean isPermit = salah;
String currentUrl = currentUrl(permintaan);
if (izinUrls != null && izinUrls.panjang > 0) {
for (int i = 0; i < izinUrls.panjang; i++) {
if (izinUrls[i].sama dengan(Url saat ini)) {
isPermit = benar;
merusak;
}
}
}
kembalikan isPermit;
}
//meminta alamat
string publik currentUrl(permintaan ServletRequest) {
HttpServletRequest res = (HttpServletRequest) permintaan;
String tugas = request.getParameter("tugas");
Jalur string = res.getContextPath();
String uri = res.getRequestURI();
if (tugas != null) {//uri format xx/ser
uri = uri.substring(jalur.panjang(), uri.panjang()) + "?" + "tugas="
+ tugas;
} kalau tidak {
uri = uri.substring(jalur.panjang(), uri.panjang());
}
System.out.println("Alamat permintaan saat ini:" + uri);
kembalikan uri;
}
public void init(FilterConfig filterConfig) melempar ServletException {
// TODO Stub metode yang dibuat secara otomatis
String izinUrls = filterConfig.getInitParameter("izinUrls");
String gotoUrl = filterConfig.getInitParameter("gotoUrl");
ini.gotoUrl = gotoUrl;
if (izinUrls != null && izinUrls.panjang() > 0) {
this.permitUrls = izinUrls.split(",");
}
}
}
Web.xml
Copy kode kodenya sebagai berikut:
<filter>
<nama-filter>loginFilter</nama-filter>
<filter-class>filter.LoginFilter</filter-class>
<init-param>
<nama-param>abaikan</nama-param>
<param-value>salah</param-value>
</init-param>
<init-param>
<param-name>izinUrl</param-name>
<param-value>/,/servlet/Loginservlet?task=login,/public.jsp,/login.jsp</param-value>
</init-param>
<init-param>
<nama-param>gotoUrl</nama-param>
<nilai-param>/login.jsp</nilai-param>
</init-param>
</filter>
<pemetaan filter>
<nama-filter>loginFilter</nama-filter>
<url-pattern>/*</url-pattern>
</pemetaan filter>
Kode pendek ini terutama mengimplementasikan pemfilteran login pengguna, dan prinsip pemfilteran izinnya sama. Ubah saja penilaian apakah pengguna login menjadi apakah dia memiliki izin!