เรามีการตรวจสอบสิทธิ์การเข้าสู่ระบบด้วยแบบฟอร์มบนเว็บโดยที่ j_securtiy_check
ทำงาน เราต้องการเปลี่ยนแปลงโดยการตรวจสอบการเข้าสู่ระบบแบบเป็นโปรแกรม วิธีที่เหมาะสมในการให้เซิร์ฟเล็ตตรวจสอบชื่อผู้ใช้และรหัสผ่านที่ส่งผ่านไปคืออะไร? เห็นได้ชัดว่าเซิร์ฟเล็ตไม่มีการป้องกัน
เราได้ทดลองกับ server.xml Realm นี้:
<Realm className="org.apache.catalina.realm.DataSourceRealm"
dataSourceName="UserDatabase"
userTable="app_user" userNameCol="login_name" userCredCol="password_value"
userRoleTable="user_perm" roleNameCol="permission_name"
allRolesMode="authOnly" digest="MD5"
/>
เหตุผลก็คือ เรามีไคลเอนต์ Java WebStart ที่ส่งข้อมูลการเข้าสู่ระบบไปยัง LoginServlet ที่ไม่มีการป้องกัน ปัจจุบันเซิร์ฟเล็ตนี้รับรองความถูกต้องกับบริการลงชื่อเพียงครั้งเดียวของ JOSSO แต่ฉันต้องการลบสิ่งนี้ออกและใช้การรับรองความถูกต้อง tomcat7 อย่างง่ายสำหรับผู้เริ่มต้น จากนั้นจึงย้ายไปยัง OpenAM ในที่สุด หากฉันสามารถสร้างค่า JSSESSIONIDSSO โดยทางโปรแกรมและบรรจุสิ่งนี้ลงในคุกกี้
นี่คือรหัสบางส่วนที่ฉันพบ นี่เป็นวิธีที่ถูกต้องในการเรียกใช้การตรวจสอบสิทธิ์หรือไม่
ApplicationContextFacade acf = (ApplicationContextFacade) this.getServletContext();
Field privateField = ApplicationContextFacade.class.getDeclaredField("context");
privateField.setAccessible(true);
ApplicationContext appContext = (ApplicationContext) privateField.get(acf);
Field privateField2 = ApplicationContext.class.getDeclaredField("context");
privateField2.setAccessible(true);
StandardContext stdContext = (StandardContext) privateField2.get(appContext);
Realm realm = stdContext.getRealm();
Principal principal = realm.authenticate(loginBean.getUsername(), loginBean.getPassword());
if (principal == null)
{
return 0;
}
GenericPrincipal genericPrincipal = (GenericPrincipal) principal;
System.out.println ("genericPrincipal=" + genericPrincipal.toString());